Нормальная форма Бойса — Кодда (НФБК)

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

нормальной форме сильно проблематично. В частности, для таких случаев была сформулирована нормальная форма Бойса — Кодда (НФБК).

Отношение находится в нормальной форме Байса — Кодда тогда и только тогда, когда каждая его нетривиальная и неприводимая слева функциональная зависимость имеет в качестве своего детерминанта некоторый потенциальных ключ[1].

Предположим, что рассматриваемое отношение содержит три атрибута — "Заказ", "Товар" и "Поставщик" (рис. 2.79), при этом обладает некоторыми ограничениями:

  • • в каждом заказе указывается определенный товар от одного поставщика;
  • • каждый поставщик поставляет только один товар;
  • • определенный товар могут поставлять несколько поставщиков.

image119

Рис. 2.79. Функциональные зависимости примера перекрывающихся ключей


В данном примере имеются перекрывающиеся потенциальные ключи: {"Заказ", "Товар"} и {"Заказ", "Поставщик"}. Имеющееся отношение находится в третьей нормальной форме, но не в нормальной форме Байса — Кодда. Это вызывает аномалии обновления, мешающие корректно хранить и обрабатывать данные. В итоге, данное отношение стоит разбить на два отношения (рис. 2.80).

image120

Рис. 2.80. Нормализация отношения с перекрывающимися ключами


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

Правило перехода ЗНФ -> НФБК

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

Другим примером перекрывающихся потенциальных ключей может быть такой: зависимость количества товара от детерминанта "Товар" "Заказ" и зависимость ценового сегмента от детерминанта "Товар" — "Поставщик". Этот пример наиболее приближен к реалиям предметной области, поскольку количество товара в заказе должно определяться совокупностью атрибутов "Заказ" и "Товар", а ценовой сегмент товара определяется не только самим товаром, но и поставщиком этого товара.

Этот пример представляет отношение в нормальной форме Байса - Кодда, хотя и содержит перекрывающиеся ключи (рис. 2.81), поскольку эти ключи являются единственными детерминантами для соответствующего неключевого атрибута и процесс нормализации не требуется.

image121


Рис. 2.81. Функциональная зависимость для двух отношений
с перекрывающимися ключами

  • [1] Дейт К. Дж. Введение в системы баз данных.
 
< Пред   СОДЕРЖАНИЕ     След >