Заказ_на книгу (имя_заказчика, дата_заказа, ISBN, название, автор, количество, цена, сумма_заказа)

Согласно Кодду, любая нормализованная схема (схема без повторяющихся элементов) автоматически находится в 1НФ независимо от того, насколько сложен ее ключ и какая взаимосвязь существует между ее элементами.

В последней схеме атрибуты «название», «автор», «цена» зависят от части ключа (а именно, от «ISBN»), тогда как атрибут «количество» зависит от всего ключа. Это называется, соответственно, частичной и полной функциональной зависимостью от ключа. По определению схема находится в 2НФ, если она находится в 1НФ и все ее неключевые атрибуты полностью функционально зависят от ключа. Таким образом, для приведения схемы в 2НФ, необходимо избавится от частичной функциональной зависимости. После избавления от нее последняя схема будет выглядеть следующим образом:

Заказ_на_книгу (имя заказчика, дата заказа, ISBN, количество, сумма_заказа)

Книга (ISBN, автор, название, цена)

Заметим, что возможно упростить ситуацию и дальше: атрибуты «количество» и «сумма_заказа» являются взаимно-зависимыми. По определению схема находится в ЗНФ если она находится в 2НФ и никакой из ее неключевых атрибутов не является зависимым ни от какого другого неключевого атрибута. Поскольку в нашем примере атрибут «сумма_заказа» фактически является избыточным то, для получения ЗНФ, его можно просто удалить.

Иногда для построения ЗНФ необходимо выразить зависимость между неключевыми атрибутами в виде отдельной схемы. Так для сотрудников, работающих по различным проектам, возможна следующая схема [20]:

Сотрудник (таб_номер, телефон, почасовая_оплата, N_npoeктa, дата_окончания)

Очевидно, что данная схема находится в 2НФ. Однако «N_npoeктa» и «дата_окончания» являются зависимыми атрибутами. После расщепления схемы получим ЗНФ:

Участник проекта (таб_номер, телефон, почасовая_оплата, N_пpoeктa)


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: