Нормализация бд.
Чтобы создаваемая БД работала корректно, данные в ней должны быть правильно организованы. При этом устраняется дублирование данных и обеспечивается корректная взаимозависимость связанных данных. Для достижения указанных целей выполняется так называемая нормализация БД, базирующаяся на нескольких нормальных формах (НФ), каждая из которых обозначает определённый уровень оптимизации данных.
Требования для любой нормальной формы:
-
Каждая последующая НФ должна быть лучше предыдущей;
-
При переходе к следующей НФ свойства предыдущих сохраняются.
Вначале подробно исследуется предметная область. Допустим, в результате исследования установлено, что в БД необходимо отобразить информацию об объектах:
Объекты |
Информация, например: |
Студент |
Ф.И.О., номер зачётной книжки и др. |
Учебная группа |
Шифр или номер группы и др. |
Факультет |
Название и др. |
Учебный предмет |
Название и др. |
Оценка |
Балл, название оценки и др. |
Информация об объектах может быть значительно расширена. Например: о стоуденте – домашний адрес, телефон и т.д.
Первая нормальная форма (1НФ)
Свойства:
-
в отношении нет одинаковых кортежей (записей);
-
атрибуты не упорядочены и различны по наименованию;
-
кортежи (поля) не упорядочены;
-
значения атрибутов неделимы.
При построении логической модели данных всю информацию, описывающую предметную область, вначале можно представить в виде одного отношения (таблицы), которое будет содержать все необходимые поля, и удовлетворять требованиям 1НФ.
Примеры названий доменов (полей):
Код студента = fID_Student;
Фамилия студента = fLast_Name;
Имя студента = fFirst_Name;
Отчество студента = fMiddle_Name;
Шифр группы = fGroup;
Оценка = fMark;
Учебный предмет = fSubject;
Учебный семестр = fSemester.
1Нф. Фрагмент обобщённого отношения Образование (Education)
fID_Student |
fLast_Name |
… |
fGroup |
fMark |
fSubject |
fSemester |
0001 |
Иванов |
… |
С11 |
4 |
Физика |
1 |
0002 |
Петров |
… |
С12 |
3 |
Физика |
1 |
… |
… |
… |
… |
… |
… |
… |
0001 |
Иванов |
… |
С11 |
5 |
Математика |
1 |
Создание отдельных кортежей (полей) Фамилия студента, Имя студена, Отчество студента вызвано соблюдением свойства 1НФ – неделимость значения атрибута. (Атрибут Фамилия Имя и Отчество студента явно можно разделить на три значения).
Поле fID_Student однозначно определяет каждого студента. Но, так как один и тот, же студент в этом отношении может упоминаться неоднократно, а свойство 1НФ – уникальность кортежей (записей) должно соблюдаться, в отношении применён составной ключ из полей fID_Student, fSubject, fSemester.
В результате создано большое отношение, удовлетворяющее всем свойствам 1НФ. Но с ним неудобно работать ввиду его громоздкости и избыточности (многие данные дублируются по несколько раз).
В результате при изменении содержания какого-либо атрибута изменение необходимо выполнить во всех кортежах, где эта информация встречается.