Нормализация баз данных

Одни и те же данные могут группироваться в таблицы различ­ными способами. Группировка атрибутов в отношениях должна быть рациональной, т.е. минимизирующей дублирование данных и упрощающей процедуры их обработки и обновления. Устране­ние избыточности данных, являющееся одной из важнейших за­дач при проектировании баз данных, обеспечивается нормализа­цией.

Нормализация — это формальный аппарат ограничений на фор­мирование таблиц (отношений), который позволяет устранить дублирование, обеспечивает непротиворечивость хранимых дан­ных и уменьшает трудозатраты на ведение (ввод, корректировку) базы данных.

Процесс нормализации заключается в разложении (декомпо­зиции) исходных отношений БД на более простые отношения. При этом на каждой ступени этого процесса схемы отношений приводятся в нормальные формы. Для каждой ступени нормали­зации имеются наборы ограничений, которым должны удовлетворять отношения БД. Тем самым удаляется из таблиц базы избы­точная неключевая информация.

Процесс нормализации основан на понятии функциональной зависимости атрибутов: атрибут А зависит от атрибута В (В -> А), если в любой момент времени каждому значению атрибута В соот­ветствует не более одного значения атрибута А.

Зависимость» при которой каждый неключевой атрибут зави­сит от всего составного ключа и не зависит от его частей, называ­ется полной функциональной зависимостью. Если атрибут А зависит от атрибута 5, а атрибут В зависит от атрибута С (С -> В -> А), но обратная зависимость при этом отсутствует, то зависимость Сот А называется транзитивной.

Общее понятие нормализации подразделяется на несколько нормальных форм.

Информационный объект (сущность) находится в первой нор­мальной форме (1НФ), когда все его атрибуты имеют единствен­ное значение. Если в каком-либо атрибуте есть повторяющиеся значения, объект (сущность) не находится в 1НФ, и упущен, по крайней мере, еще один информационный объект (еще одна сущ­ность).

Например, задано следующее отношение:

ПРЕДМЕТ (Код предмета. Название, Цикл, Объем часов, Преподаватели).

Это отношение не находится в 1НФ, так как атрибут Препода­ватели подразумевает возможность наличия нескольких фамилий преподавателей в записи, относящейся к какому-то конкретному предмету, что соответствует участию нескольких преподавателей в ведении одной дисциплины.

Переведем атрибут с повторяющимися значениями в новую сущность, назначим ей первичный ключ (Код преподавателя) и свяжем с исходной сущностью ссылкой на ее первичный ключ (Код предмета). В результате получим две сущности, причем во вторую сущность добавятся характеризующие ее атрибуты:

ПРЕДМЕТ (Код предмета. Название, Цикл, Объем часов); ПРЕПОДАВАТЕЛЬ (Код преподавателя, ФИО, Должность, Оклад, Адрес, Код предмета).

Полученные выражения соответствуют случаю, когда несколь­ко преподавателей могут вести один предмет, но каждый препо­даватель не может вести более одной дисциплины. А если учесть, что на самом деле один лектор может читать более одной дисцип­лины, так же как одну и ту же дисциплину могут читать несколь­ко лекторов, необходимо отказаться от жесткой привязки преподавателя к предмету в сущности ПРЕПОДАВАТЕЛЬ, создав до­полнительную сущность ИЗУЧЕНИЕ, которая будет показывать, как связаны между собой преподаватели и предметы:

ПРЕДМЕТ (Код предмета. Название, Цикл, Объем часов); ПРЕПОДАВАТЕЛЬ (Код преподавателя, ФИО, Должность, Оклад, Адрес);

ИЗУЧЕНИЕ (Код предмета. Код преподавателя).