- Нормальная форма Бойса-Кодда
-
Нормальная форма Бойса — Кодда (BCNF) — одна из возможных нормальных форм таблицы реляционной базы данных. Это модификация третьей нормальной формы (в некоторых источниках именно 3NF называется формой Бойса-Кодда). Названа в честь Рэя Бойса и Эдгара Кодда.
Определение
Отношение находится в BCNF, если оно находится в 3NF и в нем отсутствуют функциональные зависимости атрибутов первичного ключа от неключевых атрибутов. Ситуация, когда отношение будет находиться в 3NF, но не в BCNF, возникает при условии, что отношение имеет два (или более) возможных ключа, которые являются составными и имеют общий атрибут. На практике такая ситуация встречается достаточно редко, для всех прочих отношений 3NF и BCNF эквивалентны.
Пример 1
Пример приведения таблицы к нормальной форме Бойса — Кодда
Исходная таблица:
Номер клиента Дата собеседования Время собеседования Номер комнаты Номер сотрудника С345 13.10.03 13.00 103 А138 С355 13.10.03 13.05 103 А136 С368 13.09.03 13.00 102 А154 С366 13.09.03 13.30 105 А207 В результате приведения к форме Бойса—Кодда получаются две таблицы:
Номер клиента Дата собеседования Время собеседования Номер Сотрудника С345 13.10.03 13.00 А138 С355 13.10.03 13.05 А136 С368 13.09.03 13.00 А154 С366 13.09.03 13.30 А207 Дата собеседования Номер сотрудника Номер комнаты 13.10.03 А138 103 13.10.03 А136 103 13.09.03 А154 102 13.09.03 А207 105 Пример 2
Предположим, создаётся таблица бронирования для теннисных кортов на день: {Номер корта, Время начала, Время окончания, Тариф}. Тариф зависит от выбранного корта и членства в клубе.
Таким образом, возможны следующие составные первичные ключи: {Номер корта, Время начала}, {Номер корта, Время окончания}, {Тариф, Время начала}, {Тариф, Время окончания}.
Таблица соответствует второй и третьей нормальной форме, так как атрибуты, не входящие в состав первичного ключа, зависят от составного первичного ключа целиком (2NF) и нет транзитивных зависимостей (3NF).
Тем не менее, существует функциональная зависимость тарифа от номера корта. То есть, по ошибке можно нарушить логическую целостность и, например, приписать тариф Premium для первого корта, хотя тариф Premium может относиться только ко второму корту.
Можно улучшить структуру, разбив таблицу на две: {Номер корта, Время начала, Время окончания, Член клуба} и {Тариф, Номер корта, Член клуба}. Данное отношение будет соответствовать BCNF.
Wikimedia Foundation. 2010.