Рассмотрим понятие транзитивная функциональная зависимость.
Транзитивная функциональная зависимость
Пусть А, В, С – атрибуты некоторого отношения. При этом $А \to В$ и $В \to С$, а обратного соответствия нет, то есть $С \not \to В$ и $В \not \to А$. Тогда С транзитивно зависит от А.
Другими словами, транзитивная зависимость возникает, когда неключевой атрибут находится в функциональной зависимости от одного или большего числа неключевых атрибутов.
Рассмотрим отношение ХРАНЕНИЕ (ОРГАНИЗАЦИЯ, СКЛАД, ВМЕСТИМОСТЬ), содержащее сведения об организациях, которые получают товары со складов, и о вместимости данных складов. Ключевым является атрибут ОРГАНИЗАЦИЯ. Если каждая организация товар может получать лишь с одного склада, то в рассматриваемом отношении существуют такие функциональные зависимости:
- ОРГАНИЗАЦИЯ $\to$ СКЛАД,
- СКЛАД $\to$ ВМЕСТИМОСТЬ.
В данной ситуации появляются аномалии:
- когда в любой момент товар со склада не получает ни одна фирма, то в базу данных невозможно внести данные о его вместимости (поскольку ключевой атрибут не определен);
- если изменяется вместимость склада, необходимо просмотреть все отношение и изменить кортежи для всех фирм, которые связаны с этим складом.
Для того, чтобы избавиться от указанных аномалий, нужно выполнить разбиение исходного отношения на два:
- ХРАНЕНИЕ (ОРГАНИЗАЦИЯ, СКЛАД),
- ВМЕСТИМОСТЬ_СКЛАДА (СКЛАД, ВМЕСТИМОСТЬ).
Третья нормальная форма
Отношение находится в третьей нормальной форме (3NF), если данное отношение находится во второй нормальной форме и каждый неключевой атрибут находится в нетранзитивной зависимости от первичного ключа.
Рассмотрим пример базы данных вуза:
ПРЕПОДАВАТЕЛИ (Таб_Номер_препод, ФИО_препод, Должность);
СТУДЕНТЫ (Номер_зачет_кн, ФИО_ст, Тема_курсовой);
КОНСУЛЬТАЦИЯ (Таб_Номер_препод, Номер_зачет_кн, Дата, Время, Кабинет, Объем).
В последнем отношении существует транзитивная зависимость:
(Таб_Номер_препод, Номер_зачет_кн, Дата) $\to$ Кабинет $\to$ Объем.
Таким образом, данное отношение не находится в третьей нормальной форме со следующими последствиями:
- при исключении аудитории из расписания консультаций о ней полностью теряется информация;
- если аудиторию перестраивали, после чего был изменен ее объем, необходимо выполнить просмотр всех кортежей и провести изменение значений атрибута.
Для того, чтобы устранить транзитивную зависимость, нужно провести разбиение последнего отношения с удалением из него транзитивно-зависимого атрибута и помещением его и копии того атрибута, от которого он зависит, во вновь созданное отношение.
Следовательно, база данных данного примера без транзитивных зависимостей в третьей нормальной форме будет иметь следующий вид:
ПРЕПОДАВАТЕЛИ (Таб_Номер_препод, ФИО_препод, Должность);
СТУДЕНТЫ (Номер_зачет_кн, ФИО_ст, Тема_курсовой);
КОНСУЛЬТАЦИЯ (Таб_Номер_препод, Номер_зачет_кн, Дата, Время, Кабинет);
КАБИНЕТ (Кабинет, Объем).
В процессе проектирования структуры базы данных считают корректной установку, при которой любая база данных должна пребывать как минимум в третьей нормальной форме. В практической деятельности третью нормальную форму схем отношений считают достаточной в большинстве случаев, и приведение к третьей нормальной форме обычно является заключающим этапом процесса проектирования реляционной базы данных.
Рассмотрим пример, в котором приведем таблицу 1, содержащую набор транзитивных зависимостей, к двум таблицам 2 и 3, которые находятся в третьей нормальной форме. Таблица 1 имеет такие ограничения предметной области:
- у каждого работника может быть лишь один менеджер;
- один менеджер может руководить несколькими работниками.