Определение 1. Отношение находится в3НФ, если оно находится во 2НФ и каждый неключевой атрибут нетранзитивно зависит от первичного ключа.
Существует и альтернативное определение.
Определение 2. Отношение находится в 3НФ в том и только том случае, если все неключевые атрибуты отношения взаимно независимы и полностью зависят от первичного ключа.
В рассматриваемом примере в отношении R1 отсутствуют транзитивные зависимости, а в отношении R2 они есть:
ФИО ® Долж ® Оклад,
ФИО ® Оклад ®Должность,
ФИО ® Стаж ® Надб
Устраним транзитивные зависимости, преобразуя отношение R2 в три отношения R3, R4 и R5, каждое из которых находится в 3НФ.
А) Б)
R3
ФИО
Долж
Стаж
Каф
Иванов И.М.
Преп
Петров М.И.
Ст.преп
Сидоров Н.Г.
Преп
Егоров В.В.
Преп
R4
Долж
Оклад
Преп
Ст.преп
R5
Стаж
Надб
Рис. 6.7. Отношения базы данных в 3НФ
Как правило, построение 3НФ для отношений базы данных является достаточным и процесс проектирования реляционной БД заканчивается. В примере таблицы R1, R2, R3, R4 и R5 окончательный результат проектирования базы данных. В таблицах присутствует дублирование данных, но оно не является избыточным.
Если в отношении имеется зависимость атрибутов составного ключа от неключевых атрибутов, то необходимо перейти к усиленной 3НФ (нормальной форме Бойса – Кодда (БКНФ)).
Отношение находится в БКНФ, если оно назодится в 3НФ и в нем отсутствуют зависимости ключей (атрибутов составного ключа) от неключевых атрибутов.
Рассмотрим отношение ПРОЕКТЫ:
Номер_проекта
Код_сотрудника
Задание_сотрудника
Первичным ключом отношения является вся совокупность атрибутов. Сотрудники могут участвовать в нескольких проектах, и разные проекты могут содержать одинаковые задания. Предполагается, что каждый сотрудник, участвующий в некотором проекте, выполняет все виды заданий по этому проекту. Т.к. в отношении все атрибуты составляют первичный ключ и неключевых атрибутов нет, то отношение ПРОЕКТЫ находится в форме БКНФ.
Недостаток отношения ПРОЕКТЫ состоит в том, что при подключении/отстранении от проекта некоторого сотрудника приходится добавлять/исключать из отношения столько кортежей, сколько заданий имеется в проекте.
В кортежах отношения хранятся повтояющиеся значения кодов сотрудников, несколько раз перечисляются все задания по проекту. Желательно привязку заданий к проектам поместить в отдельную таблицу и исключить повторения в основной таблице. Причиной аномалии является наличие многозначной зависимости между атрибутами:
Номер_проекта Þ Код_сотрудника
Номер проекта ÞЗадание_сотрудника.
В произвольном отношении R(A,B,C) могут одновременно существовать многозначные зависимости А ÞВ и А Þ С. Это обозначается как А ÞВ|С.
Дальнейшая нормализация отношений, типа ПРОЕКТЫ, лсновывается на следующей теореме.
Теорема Фейджина (Fagin R.). Отношение R(A,B,C) можно спроецировать без потерь в отношения R1(A,B) и R2(A,C) в том и только в том случае, когда существует зависимость А ÞВ|С.
Под проецированием без потерь здесь понимается такой способ декомпозиции отношения, при котором оно полностью и без избыточности восстанавливается путем естественного соединения полученных отношений. Пример.Пусть имеется простейшее отношение R(A,B,C) вида:
R R1 R2
А
В
С
А
В
А
С
К
К
К
К
Л
К
Л
М
Л
М
М
М
М
М
М
Отношения R1 и R2 – проекции на атрибуты А, В и А, С.
Результатом операции соединения бинарных отношений R1(A,B) и R2(A,C) по атрибуту А является тернарное отношение с атрибутами A, B иC, кортежи которого получаются путем связывания отношений R1 и R2 по типу 1:М на основе совпадения значений атрибута А. Порожденное таким образом отношение будет в точности совпадать с исходным.
Определение четвертой нормальной формы. Отношение R находится в четвертой нормальной форме (4НФ) в том и только в том случае, когда существует многозначная зависимость А Þ В, а все остальные атрибуты R функционально зависят от А.
Отношение ПРЕКТЫ можно представить в виде двух отношений: ПРОЕКТЫ-СОТРУДНИКИ и ПРОЕКТЫ-ЗАДАНИЯ:
ПРОЕКТЫ-СОТРУДНИКИ (первичный ключ – оба атрибута)
Номер_проекта
Код_сотрудника
ПРОЕКТЫ- ЗАДАНИЯ (первичный ключ – оба атрибута)
Номер_проекта
Задание_сотрудника
Оба полученных отношения находятся в 4НФ, нет дублирования значений кодов сотрудников. Соединение этих проектов приведет к получению исходного отношения ПРОЕКТЫ.
В общем случае не всякое отношение можно восстановить после такого проецирования. Восстановление возможно потому, что каждый сотрудник, участвующий в некотором проекте, выполнял все задания по этому проекту (принцип 1:М), а связь между сотрудниками и проектами М:М.