Рассмотрим транзитивную зависимость А®В, В®А (В не ключ), В®СÞА®С. Пусть есть отношение «хранение» (фирма, склад, объём), которое содержит информацию о фирмах, получающих товары со складов и объёмы этих складов. Фирма получает товары только с одного склада. В отношении есть две функциональные зависимости: фирма ®склад и склад ® объём.
Существует три аномалии:
1 Включение. Если на данный момент отсутствует фирма, получающая товар со склада, то в БД нельзя ввести информацию об объёме склада;
2 Удаление. Если последняя фирма перестаёт получать товар с данного склада, данные о складе и его объёме нельзя дальше хранить в БД;
3 Обновление. Если объём склада изменился, необходим просмотр всего отношения и изменение картежей для фирм, связанных со складом.
Транзитивная зависимость вызвана наличием в отношении двух семантически разных трактов, аналогично примеру 2НФ.
Преобразование отношения в 3НФ устраняет рассмотренные аномалии.
Отношение находится в 3НФ, если оно находится в 2НФ, и в нём отсутствуют транзитивные зависимости не первичных атрибутов от ключа.
Следующее разложение приводит к отношению в 3НФ:
Хранение (фирма, склад)
Объём склада (склад, объём).
Отношение находится в 1-й нормальной форме, если значения его атрибутов простые, т.е. значение атрибута не должно быть множеством или повторяющейся группой. Атрибуты не должны быть отношениями. Нормализованному отношению соответствует однородная табличная структура. Не нормализованному – многоуровневая таблица или иерархическая структура.
Отношение находится во 2-й нормальной форме, если оно находится в первой нормальной форме, и каждый не первичный атрибут функционально полно зависит от ключа.
Отношение находится во 3-й нормальной форме, если оно находится во второй нормальной форме и нет транзитивной зависимости не первичных атрибутов от ключа (a → b, c → a => c → b).