
Нормальная форма Бойса – Кодда (нфбк или усиленная 3 нф)
НФБК учитывает функциональные зависимости, в которых участвуют потенциальные ключи, а не только первичный ключ. Отношение находится в НФБК тогда и только тогда, когда каждый его детерминант является потенциальным ключом.
Для отношения с единственным потенциальным ключом его 3 НФ и НФБК являются эквивалентными. Для проверки принадлежности отношения к НФБК надо найти все его детерминанты и убедится в том, что они являются потенциальными ключами. Если это не так выполнить нормализацию, приняв потенциальный ключ за основной.
Пример.
Пусть задан следующий отчет:
Страница 1 Отчет о проверке проведения работ 01.02.03 на объекте |
||||||||||
Объект: PG4 |
Адрес: Коломна |
|||||||||
Дата проверки |
Время проверки |
Комментарий |
Шифр проверяющего |
Ф.И.О. |
Транспорт |
|||||
05.01.03 |
10:00 |
Замечаний нет |
SG37 |
Петров |
М251 |
|||||
21.01.03 |
9:00 |
Замечаний нет |
SG14 |
Сидоров |
М523 |
|||||
22.01.03 |
12:00 |
Отставание от графика |
SG14 |
Сидоров |
М721 |
Страница 2 Отчет о проверке проведения работ 01.02.03 на объекте |
|||||
Объект: PG16 |
Адрес: Ногинск |
||||
Дата проверки |
Время проверки |
Комментарий |
Шифр проверяющего |
Ф.И.О. |
Транспорт |
08.01.03 |
11:00 |
Замечаний нет |
SG37 |
Петров |
М251 |
20.01.03 |
14:00 |
Заменить трубы |
SG14 |
Сидоров |
М523 |
На основе этого отчета можем построить ненормализованную таблицу «Проверка»:
№ объекта |
Адрес |
ПДата |
ПВремя |
Коммент. |
№ Сл. |
ФИО |
Транс. |
PG4 |
Коломна |
05.01.03 |
10:00 |
Замечаний нет |
SG37 |
Петров |
М251 |
|
|
21.01.03 |
9:00 |
Замечаний нет |
SG14 |
Сидоров |
М523 |
|
|
22.01.03 |
12:00 |
Отставание от графика |
SG14 |
Сидоров |
М721 |
PG16 |
Ногинск |
08.01.03 |
11:00 |
Замечаний нет |
SG37 |
Петров |
М251 |
|
|
20.01.03 |
14:00 |
Заменить трубы |
SG14 |
Сидоров |
М523 |
Для получения первой нормальной формы воспользуемся выравниванием таблицы.
№ объекта |
Адрес |
ПДата |
ПВремя |
Коммент. |
№ Сл. |
ФИО |
Транс. |
PG4 |
Коломна |
05.01.03 |
10:00 |
Замечаний нет |
SG37 |
Петров |
М251 |
PG4 |
Коломна |
21.01.03 |
9:00 |
Замечаний нет |
SG14 |
Сидоров |
М523 |
PG4 |
Коломна |
22.01.03 |
12:00 |
Отставание от графика |
SG14 |
Сидоров |
М721 |
PG16 |
Ногинск |
08.01.03 |
11:00 |
Замечаний нет |
SG37 |
Петров |
М251 |
PG16 |
Ногинск |
20.01.03 |
14:00 |
Заменить трубы |
SG14 |
Сидоров |
М523 |
Отношение «Проверка» имеет три потенциальных ключа (№ объекта, ПДата), (№ Сл., ПДата, ПВремя), (Транс., Пдата, Пвремя). В качестве первичного ключа выберем (№ объекта, Пдата). Отношение «Проверка» определим следующим образом:
Проверка(№ объекта, Пдата, Пвремя, Адрес, Коммент, № Сл., ФИО, Транс).
Построим функциональные зависимости:
Fd1: № объекта, Пдата Пвремя, Адрес, Коммент, № Сл., ФИО, Транс (Первичный ключ).
Fd2: № объекта Адрес (Частичная зависимость).
Fd3: № сл ФИО (Транзитивная зависимость)
Fd4: № сл, Пдата Транс
Fd5: Транс, Пдата, Пвремя № объекта, Адрес, Коммент, № Сл, ФИО (Потенциальный ключ).
Fd6: № сл, Пдата, Пвремя № объекта, Адрес, Коммент, ФИО (Потенциальный ключ)
Это же можно представить в виде диаграммы:
Отношение «Проверка» может быть преобразовано во вторую НФ путем удаления частичной зависимости из этого отношения путем создания двух новых отношений «Объект» и «Проверка1».
Объект(№ объекта, Адрес)
Проверка1(№ объекта, Пдата, Пвремя, Коммент, № Сл., ФИО, Транс).
Теперь проанализируем полученные отношения.
Отношение «Объект»:
№ объекта Адрес
Отношение «Проверка1»:
Fd1*: № объекта, Пдата Пвремя, Коммент, № Сл., ФИО, Транс
Fd3: № сл ФИО
Fd4: № сл, Пдата Транс
Fd5*: Транс, Пдата, Пвремя № объекта, Коммент, № Сл, ФИО
Fd6*: № сл, Пдата, Пвремя № объекта, Коммент, ФИО
Отношение «Объект» не содержит транзитивных зависимостей, следовательно, находится в третьей нормальной форме.
В отношении «Проверка1» есть транзитивная зависимость:
№ объекта, Пдата № Сл ФИО.
Транзитивная зависимость удаляется преобразованием отношения «Проверка1» в два отношения «Служащий» и «Проверка2».
Служащий(№ Сл, ФИО)
Проверка2(№ объекта, Пдата, Пвремя, Коммент, № Сл, Транс)
Проанализируем отношение «Проверка2».
Fd1**: № объекта, Пдата Пвремя, Коммент, № Сл., Транс
Fd4: № сл, Пдата Транс
Fd5**: Транс, Пдата, Пвремя № объекта, Коммент, № Сл
Fd6*: № сл, Пдата, Пвремя № объекта, Коммент
В отношении содержится детерминант № Сл, Пдата, который не является потенциальным ключом. Поэтому это отношение может страдать от аномалии обновления. Отношение «Проверка2» не находится в НФБК. Для его преобразования его в НФБК его надо разбить на два новых отношения:
Транспорт_для_сотрудника(№ сл, Пдата, Транс)
Инспекция(№ объекта, Пдата, Пвремя, Коммент, № Сл).
Схема декомпозиции будет выглядеть:
Результирующие отношения имеют вид:
Объект(№ объекта, Адрес)
Служащий(№ Сл, ФИО)
Транспорт_для_сотрудника(№ сл, Пдата, Транс)
Инспекция(№ объекта, Пдата, Пвремя, Коммент, № Сл).
4 НФ
НФБК позволяют устранить аномалии, вызываемые функциональными зависимостями. Однако, проблемы, связанные с избыточностью данных, могут вызывать многозначные зависимости. Рассмотрим отношение Подразделение_Служащий_Клиент, в котором содержатся имена сотрудников, взаимодействующие с клиентами некоторого отдела.
Отдел |
Служащий |
Клиент |
Библиотека |
Петров |
Николаев |
Библиотека |
Сидоров |
Николаев |
Библиотека |
Петров |
Викторов |
Библиотека |
Сидоров |
Викторов |
В этом примере в библиотеке два сотрудника, которые обслуживают двух клиентов. Поскольку между сотрудниками и клиентами нет связи, необходимо создать строку для каждой комбинации. В данном примере существует многозначная зависимость, так как в нем содержится две независимые связи 1 : n.
В случае многозначной зависимости,
существующей между атрибутами A,
B, C
некоторого отношения, для каждого
значения A имеется
набор значений атрибута B
и набор значений атрибута C.
Однако, входящие в этот набор значения
атрибутов B, C
не зависят друг от друга.
.
Многозначная зависимость AB
некоторого отношения R
определяется как тривиальная, если
атрибут B является
подмножеством атрибута A
или
В противном случае зависимость
нетривиальная.
Многозначная зависимость в примере нетривиальная. Несмотря, что это отношение находится в НФБК, оно недостаточно хорошо структурировано из-за наличия повторяющихся строк. Поэтому его целесообразно разбить на два отношения в 4 НФ.
4 НФ – это отношение в НФБК, которое не содержит нетривиальных многозначных зависимостей.
5 НФ
Свойство декомпозиции, которое вызывает генерацию ложных строк при обратном соединении декомпозированных отношений с помощью операции естественного соединения.
5 НФ – отношение без зависимостей соединения.