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

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

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

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

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

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

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

Например, отношение

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

не находится в 1НФ, так как атрибут Преподаватели подразумевает возможность присутствия нескольких фамилий преподавателей в записи, относящейся к какому-то конкретному предмету, что соот­ветствует участию нескольких преподавателей в ведении одной дис­циплины. Переведем атрибут с повторяющимися значениями в но­вую сущность, назначим ей первичный ключ (Код преподавателя) и свяжем с исходной сущностью ссылкой на первичный ключ послед­ней (Код предмета). В результате получим две сущности, причем во вторую сущность ПРЕПОДАВАТЕЛЬ мы добавляем характеризую­щие ее атрибуты:

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

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

Полученные выражения соответствуют случаю, когда несколько преподавателей могут вести один предмет, но каждый преподава­тель не может вести более одной дисциплины. А если учесть, что на самом деле один лектор может читать более одной дисциплины, так же как одну и ту же дисциплину могут читать несколько лекторов, необходимо отказаться от жесткой привязки преподавателя к пред­мету в сущности Преподаватель, создав дополнительную сущность Изучение, которая будет показывать, как связаны между собой пре­подаватели и предметы:

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

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

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

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

Возвращаясь к предыдущему примеру, замечаем что атрибут Цикл в сущности ПРЕДМЕТ, характеризующий принадлежность предмета к циклу гуманитарных, естественно-научных, общепро­фессиональных или специальных дисциплин, не полностью зависит от уникального идентификатора Код предмета, так как разные пред­меты могут иметь одно и то же значение атрибута Цикл. Перенесем атрибут в новую сущность ЦИКЛ и получим четыре взаимосвязан­ные сущности:

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

ЦИКЛ (Код цикла, Название цикла);

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

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

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

В нашем примере неключевые атрибуты Должность и Оклад на­ходятся в транзитивной зависимости. В чем опасность такой зави­симости? Во-первых, несколько человек могут работать в одной и той же должности. При изменении должностного оклада в этом слу­чае нужно будет менять данные в каждой записи, содержащей эту должность. В рассмотренной ситуации нужно создать новую сущ­ность ДОЛЖНОСТЬ с находящимися в транзитивной зависимости атрибутами — Название должности и Оклад и сделать ссылку от сущности ПРЕПОДАВАТЕЛЬ на сущность ДОЛЖНОСТЬ:

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

ЦИКЛ (Код цикла, Название цикла);

ПРЕПОДАВАТЕЛЬ (Код преподавателя, Фамилия И.О., Код должности, Адрес);

ДОЛЖНОСТЬ (Код должности, Название должности, Оклад);

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