Определение. Отношение находится в 2НФ тогда и только тогда, когда оно находится в 1НФ, и каждый его не ключевой атрибут функционально полно зависит от любого возможного

Отношение находится в 2НФ тогда и только тогда, когда оно находится в 1НФ, и каждый его не ключевой атрибут функционально полно зависит от любого возможного ключа этого отношения.

Продолжим рассмотрение нашего примера. Так как первичным ключом отношения являются атрибуты (S#, P#), все остальные атрибуты должны функционально полно зависеть от ключа. Рассмотрим некоторые примеры. Так, зависимость (S#, P#)  QTY является функционально полной, так как атрибут QTY не зависит функционально ни от S#, ни от P#. Однако, зависимости (S#, P#)  SName или (S#, P#)  Price не являются функционально полными, так как существуют функциональные зависимости S#  SName и

P#  Price. Следовательно, данное отношение не находится в 2НФ.

Так как S#  SName, S#  City, S#  Code, имеем S#  (SName, City, Code). Аналогично, из функциональных зависимостей P#  PName и P#  Price можно вывести зависимость P#  (PName, Price). Применяя правило декомпозиции на основе первой функциональной зависимости, можем разбить исходное отношение на два: ПОСТАВЩИК (S#, SName, City, Code) с первичным ключом S#, и ПОСТАВЛЯЕМЫЙ ТОВАР (S#, P#, PName, Price, QTY) с составным первичным ключом (S#, P#). В отношении ПОСТАВЛЯЕМЫЙ ТОВАР атрибуты PName и Price функционально зависят от атрибута P#, следовательно, данное отношение не находится в 2НФ. Вновь применяя правило декомпозиции на основе функциональной зависимости P#  (PName, Price), разобьем отношение на два: ТОВАР (P#, PName, Price) с первичным ключом P#, и ПОСТАВКА (S#, P#, QTY) с составным первичным ключом (S#, P#). Таким образом, исходное отношение может быть разбито на три:

ПОСТАВЩИК (S#, SName, City, Code) с первичным ключом S#

ТОВАР (P#, PName, Price) с первичным ключом P#

ПОСТАВКА (S#, P#, QTY) с составным первичным ключом (S#, P#)

Легко убедиться, что все три отношения находятся в 2НФ.

Примечание: если при проектировании базы данных используется IDEF1x, тогда 2НФ достигается при соответствующем выборе независимых сущностей, а также при разрешении связей типа многие ко многим. Так, в данном примере ПОСТАВКУ можно рассматривать как неопределенную связь между сущностями ПОСТАВЩИК и ТОВАР: один поставщик поставляет нуль или более товаров, один товар поставляется нулем или более поставщиками (Рис. 6.2):

Рис. 6.2. Начальный этап проектирования с использованием IDEF1x

Разрешая неопределенную связь, получаем дополнительную сущность ПОСТАВКА (Рис. 6.3):

Рис. 6.3. Отношения, удовлетворяющие 2НФ

Полученное в результате отношение ПОСТАВЩИК все еще не свободно от определенных проблем.

Проблема вставки. Так как определена функциональная зависимость City  Code, может возникнуть необходимость включить значение кода для определенного города. Однако в отношение ПОСТАВЩИК нельзя включить такую информацию, если в данном городе нет ни одного поставщика.

Проблема обновления. Если меняется код некоторого города, необходимо изменить надлежащим образом информацию во всех кортежах отношения, в которых упоминается данный город.

Проблема удаления. Если в некотором городе размещен только один поставщик, и информация об этом поставщике удаляется, то удаляется и информация о городе, которая в дальнейшем может представлять некоторый интерес.

Причиной таких аномалий является то, что в отношении ПОСТАВЩИК существует транзитивная зависимость: из S#  City и City  Code следует S#  Code.

Третья нормальная форма


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



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