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