Упрощаем зависимости между значениями, приводим данные ко второй нормальной форме
Следующий шаг — упрощение зависимостей в структуре таблицы. В нашем случае мы определили, что атрибуты «Фамилия ученика», «Имя ученика», «Курс», «Номер потока», «Дата начала обучения», «Оценка» относятся к ученику, а атрибут «Количество уроков» — к курсу.
Задача выполняется разбиением исходной таблицы на две новые, в каждой из которых все атрибуты относятся к (зависят от) одной сущности. В результате мы получим таблицу оценок и таблицу курсов.
Фамилия ученика | Имя ученика | Курс | Номер потока | Дата начала обучения | Оценка |
Иванов | Игорь | Базы данных | 12.11.2020 | 4.9 | |
Павлова | Анастасия | Базы данных | 12.11.2020 | ||
Иванов | Игорь | Linux. Рабочая станция | 02.10.2020 | ||
Иванов | Игорь | Основы Python | 18.08.2020 | 4.9 |
Таблица 7. Приведение ко второй нормальной форме, таблица оценок
Курс | Количество уроков |
Базы данных | |
Linux. Рабочая станция | |
Основы Python |
Таблица 8. Приведение ко второй нормальной форме, таблица курсов
|
|
Полученная структура удовлетворяет требованиям второй нормальной формы:
- Структура должна находиться в первой нормальной форме.
- В каждой из таблиц все столбцы атрибутов должны относиться к (зависеть от) одной ключевой сущности.
Решаем проблему транзитивных связей и унифицируем ввод значений, приводим данные к третьей нормальной форме
Для устранения транзитивных зависимостей вынесем атрибуты потоков в отдельную таблицу. А также вынесем все повторяющиеся атрибуты в отдельные таблицы. Затем свяжем эти таблицы по ключевым столбцам.
В результате получим структуру, состоящую из четырёх таблиц: «Курсы», «Потоки», «Ученики» и «Оценки». Обратим внимание, что в таблицах курсов, потоков и учеников добавился служебный ключевой столбец. Он используется, чтобы была возможность ссылаться на соответствующие значения в других таблицах. Ключ строки также рассматривается как некоторый условный номер, или, другими словами, идентификатор записи, уникальный в пределах таблицы. В таблице не указывается несколько записей с одинаковым ключевым значением.
Ключ курса | Название курса | Количество уроков |
Базы данных | ||
Linux. Рабочая станция | ||
Основы Python |
Таблица 9. Приведение к третьей нормальной форме, таблица курсов
Ключ потока | Номер потока | Ключ курса | Дата начала обучения |
18.08.2020 | |||
02.10.2020 | |||
12.11.2020 |
Таблица 10. Приведение к третьей нормальной форме, таблица потоков
Ключ ученика | Фамилия | Имя |
Иванов | Игорь | |
Павлова | Анастасия |
Таблица 11. Приведение к третьей нормальной форме, таблица учеников
|
|
Ключ ученика | Ключ потока | Оценка |
4.9 | ||
4.9 |
Таблица 12. Приведение к третьей нормальной форме, таблица оценок
Такая структура соответствует требованиям третьей нормальной формы:
- Структура таблиц должна соответствовать второй нормальной форме.
- В таблицах должны отсутствовать транзитивные зависимости.
- Все повторяющиеся неключевые атрибуты выносятся в отдельные таблицы.
На этом этапе работу по преобразованию данных мы выполнили, а структура соответствует требованиям реляционной модели.