Нормальная форма Бойса-Кодда (НФБК)
Реляционная таблица находится в нормальной форме Бойса-Кодда (НФБК), если для любой ФЗ: X¾> Y, X ( то есть детерминанта) является возможным ключом отношения. Из определения следует, что любая таблица, удовлетворяющая НФБК, также удовлетворяет и 2НФ, однако обратное неверно.
Рассмотрим таблицу 3.9 «Оплата за работу». № Работника является ключом, следовательно, в таблице имеются функциональные зависимости:
ФЗ: № Работника ¾> Разряд;
ФЗ: № Работника ¾> Оплата.
Однако также имеется функциональная зависимость
ФЗ: Разряд ¾>
Оплата.
Атрибут «разряд» является детерминантой, так как он однозначно определяет атрибут «оплата», но «разряд» не может быть ключом отношения, поэтому в таком виде отношение «Оплата за работу» не удовлетворяет НБКФ. Но таблица 3.9 удовлетворяет 2НФ (так как неключевые атрибуты «разряд» и «оплата»). Таким образом, таблица может быть в 2НФ, но не в НФБК.
Таблица 3.9. «Работник»
№ работника | Разряд | Премиальные
| |||
1235 | 1 | 150 | |||
1412 | 2 | 120 | |||
1311 | 1 | 150 |
Чем плохи таблицы, не удовлетворяющие НФБК? Вызванные ими проблемы схожи с перечисленными для таблиц, нарушающих 2НФ:
1. Размер премиальных для типа специальности повторяется в каждой строке, относящейся к работнику этой специальности. Это избыточные данные, занимающие лишнее место.
2. Если размер премиальных для типа специальности изменяется, то требуется обновить каждую строку. Если строка удаляется, то мы можем потерять информацию о размере премиальных для данной специальности. Таким образом, таблица подвержена аномалиям обновления и удаления.
3. Если в какой-то момент времени отсутствуют работники данной специальности, то может не оказаться строки, в которой можно хранить размер премиальных. Это аномалия ввода.
Для того чтобы решить эти проблемы, таблицу необходимо разбить на несколько таблиц для устранения аномалий и поддержания целостности данных.
Создадим новую таблицу 3.10 «Работник 1», удалив из таблицы 3.9 все атрибуты, стоящие в правой части ФЗ, нарушающие критерий НФБК. В нашем примере это Премиальные. Создадим новую таблицу 3.11 «Работник 2», состоящую из атрибутов, как из левой, так и из правой части ФЗ, нарушающей критерий НФБК. В нашем примере это Специальность и Премиальные. Детерминант ФЗ Специальность будет ключом.
Таблица 3.10. «Работник 1»
№ работника |
Специальность |
1235 |
Электрик |
1412 |
Штукатур |
1311 |
Электрик |
Специальность |
Премиальные |
Электрик |
150 |
Штукатур |
120 |
Электрик |
150 |