Нормализация отношений: приведение отношений к третьей нормальной форме

Хорошо организованная структура данных БД должна:

  • сделать ввод информации простым и понятным для пользователя;

  • обеспечивать быстрый поиск требуемой информации;

  • обеспечить целостность данных БД, так чтобы при изменении одних объектов автоматически происходило соответствующее изменение связанных с ними объектов;

  • упростить разработку и сопровождение программного обеспечения;

  • исключить ненужное повторение данных, которое приводит к чрезмерному разрастанию и может являться причиной ошибок при вводе данных.

Процесс уменьшения избыточности информации в БД называется нормализацией отношений (таблиц).

Нормализация отношений БД представляет собой процесс реорганизации данных путем ликвидации повторяющихся групп и иных противоречий с целью приведения таблиц к виду, позволяющему осуществлять корректное редактирование данных.

Это комплекс ограничений на формирование таблиц, который позволяет устранить дублирование данных, обеспечивает их непротиворечивость и уменьшает трудоёмкость ввода и корректировки базы данных.

Е. Ф. Кодд выделил три нормальные формы отношений и предложил механизм, позволяющий любое отношение преобразовать к третьей (самой совершенной) форме.

Нормальные формы отношений основываются на понятии функциональной зависимости. Функционально зависимым считается такой атрибут, значение которого однозначно определяется значением другого атрибута.

Первая нормальная форма (1НФ)

Отношение между таблицами называется приведённым к первой нормальной форме, если все его атрибуты (поля) являются простыми, т. е., далее неделимыми. Не должно быть повторений строк в таблице.

Нарушение нормализации 1НФ происходит в моделях BMW, т.к. в одной ячейке содержится список из 3 элементов: M5, X5M, M1, т.е. он не является атомарным. Преобразуем таблицу к 1НФ:

Вторая нормальная форма (2НФ)

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

Неполная функциональная зависимость включает две зависимости:

  • вероятный составной ключ отношения, (как и должно быть), функционально определяет некоторый неключевой атрибут;

  • часть вероятного составного ключа также функционально определяет этот же неключевой атрибут.

Представленное в таблице отношение не соответствует форме 2НФ, т. к. характеризуется избыточностью хранимых данных:

Например, в представленной таблице вероятным составным ключом являются два поля: "Магазин-Изде­лие", но часть этого ключа "Изделие" также функционально определяет неключевой атрибут (поле) "Цена".

Из-за этого отношение в таблице находится лишь в 1НФ, но не в форме 2НФ.

Избыточность (неполная функциональная зависимость) определяется тем фактом, что цена изделия повторяется столько раз, сколько магазинов продают изделие М22.

Переход к 2НФ, т. е., устранение избыточности данных, обеспечивается созданием вместо одной исходной таблицы - двух таблиц, т. е., созданием двух отношений.

Каждая из этих таблиц находится в форме 2НФ, т. к. в первой таблице - составной вероятный ключ, а во второй – простой вероятный ключ, однозначно определяют неключевые атрибуты (поля): "План_2009_г." и "Цена".

Еще один пример:

Таблица находится в первой нормальной форме, но не во второй. Цена машины зависит от модели и фирмы. Скидка зависят от фирмы, то есть зависимость от первичного ключа неполная. Исправляется это путем декомпозиции на два отношения, в которых не ключевые атрибуты зависят от ПК.

Третья нормальная форма (3НФ)

Отношение соответствует третьей нормальной форме (ЗНФ), если оно соответству­ет 2НФ и среди его атрибутов отсутствуют транзитивные функциональные зависимости.

Транзитивная функциональная зависимость включает две зависимости:

  • вероятный ключ отношения, как и должно быть, функционально определяет не­ключевой атрибут;

  • этот же неключевой атрибут функционально определяет некоторый другой неключевой атрибут.

Для иллюстрации транзитивной зависимости рассматривается таблица:

Вероятный простой ключ таблицы (поле "Номер") функционально определяет неключевой атрибут "Группа". В то же время этот неключевой атрибут ("Группа") функционально определяет неключевой атрибут "Староста" (Занина у группы БП-11) с созданием повторов или избыточной зависимости.

Для устранения данной транзитивной зависимости, т. е., исключения избыточности, необходимо "расщепить" исходное отношение, создав два отношения:

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

Пример приведения базы данных к 3 нормальной форме