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