, Причем
Пример. Рассмотрим отношение ClientRental. Отношение находится в 1NF.
Первая нормальная форма (1NF) отношения ClientRental |
|
Здесь первичным ключом являются атрибуты {clientNo, propertyNo}.
Удовлетворяет ли отношение требованиям формы 2NF
Функциональная зависимость clientNo, propertyNo cName не является полной, поскольку существует функциональная зависимость clientNo cName.
Кроме того, поскольку атрибуты объекта недвижимости pAddress, rent, ownerNo, oName функционально зависят от атрибута propertyNo, функциональная зависимость
clientNo, propertyNo pAddress, rent, ownerNo, oName
также не является полной.
Таким образом, отношение ClientRental не удовлетворяет требованиям формы 2NF.
Для преобразования отношения ClientRental в форму 2NF необходимо создать новые отношения, причем таким образом, чтобы атрибуты, не входящие в первичный ключ, были перемещены в них вместе с копией той части первичного ключа, с которой эти атрибуты связаны полной функциональной зависимостью.
Для преобразования отношения ClientRental в форму 2NF декомпозицию исходного отношения можно выполнить в два этапа:
1-й этап. Пусть
L1={clientNo, cName},
L2={clientNo, propertyNo, pAddress, rentstart, rentFinish, rent, ownerNo, oName}
Выполним декомпозицию:
,
Осталось выполнить декомпозицию второго отношения R2:
2-й этап. Пусть
L1={propertyNo, pAddress, rent, ownerNo, oName },
L2={clientNo, propertyNo, rentstart, rentFinish}
Выполним декомпозицию:
,
Полученные три отношения имеют следующий вид (цветом выделены первичные ключи):
Client (clientNo, cName)
Rental (clientNo, propertyNo, rentstart, rentFinish)
PropertyOwner (propertyNo, pAddress, rent, ownerNo, oName)
Поскольку в этих отношениях неключевые атрибуты функционально полно зависят от первичного ключа, отношения удовлетворяют требованиям формы 2NF.
Вторая нормальная форма (2NF) отношения Client |
|
Вторая нормальная форма (2NF) отношения Rental |
|
Вторая нормальная форма (2NF) отношения PropertyOwner |
|
Упражнение 2.
Построить «свой» пример отношения в форме 1NF, в котором имеются две зависимости неключевых атрибутов от первичного ключа, нарушающие требования формы 2NF. Выполнить декомпозицию отношения и получить новые отношения, удовлетворяющие требованиям формы 2NF.
В отношении должно быть 8-10 атрибутов и не менее 8 кортежей.
5. 3-я нормальная форма
Определение (транзитивной зависимости). Пусть x, y и z – атрибуты отношения R. И существуют функциональные зависимости x y и y z. Тогда существует функциональная зависимость x z, которая называется транзитивной в том случае, если не существует обратных функциональных зависимостей y x и z x.
Отношение «СотрудникиОтделения» |
|
Например, в отношении «СотрудникиОтделения» существуют функциональные зависимости staffNo branchNo и branchNo bAddress. Зависимость staffNobAddress является транзитивной, поскольку не существует обратных зависимостей
staffNo branchNo и staffNo bAddress
Вопрос: приведите другой пример транзитивной зависимости в этом отношении.
sName salary, salary position sName position (транзитивная)
staffNo salary, salary position staffNo position (транзитивная)
Определение (3NF) Отношение, которое находится в первой и во второй нормальных формах, и не имеет атрибутов, не входящих в первичный ключ, которые находились бы в транзитивной функциональной зависимости от этого первичного ключа.
Нормализация отношений 2NF с образованием отношений ЗNF предусматривает устранение транзитивных зависимостей. Если в отношении существует транзитивная зависимость между атрибутами, то транзитивно зависимые атрибуты удаляются из него, и помещаются в новое отношение вместе с копией атрибута, от которого они транзитивно зависят.
Схема приведения отношения к 3NF
Пусть задано отношение R(x1, x2, y1, y2, y3) и x={x1, x2} – первичный ключ, т.е. существуют функциональные зависимости x y1, x y2, x y3.
Пусть в отношении отсутствуют повторяющиеся группы атрибутов и, следовательно, отношение R находится в 1NF.
Пусть все зависимости x y1, x y2, x y3 являются полными функциональными зависимостями и, следовательно, отношение R находится в 2NF.
Пусть одна из этих зависимостей является транзитивной. Например, зависимости x y1, x y2 транзитивными не являются. А зависимость x y3 является транзитивной, т.е. имеется, например, зависимость y2 y3 и не существует обратной y2 y3.
Устраним из отношения R зависимость y2 y3, нарушающую требование 3NF, выполнив декомпозицию исходного отношения на следующие два отношения.
Пусть L1={ x1, x2, y1, y2}, L2={y2, y3}
, причем
Оба полученных отношения будут удовлетворять требованиям 3NF.
Пример. Рассмотрим отношение PropertyOwner.
Отношение PropertyOwner |
|
Первичным ключом отношения является атрибут propertyNo. Все не входящие в первичный ключ атрибуты отношения PropertyOwner функционально зависят от первичного ключа. Первичный ключ не является составным, поэтому эти зависимости являются полными функциональными зависимостями. И отношение находится в 2NF.
Атрибут oName зависит также и от атрибута ownerNo. Обратных зависимостей
propertyNo ownerNo и propertyNo oName
не существует, поэтому зависимость propertyNo oName является транзитивной.
Для преобразования отношения PropertyOwner в третью нормальную форму необходимо прежде всего удалить упомянутую выше транзитивную зависимость путем создания двух новых отношений PropertyForRent и Owner:
PropertyForRent (propertyNo, pAddress, rent, ownerNo)
Owner(ownerNo, oName)
Отношение PropertyForRent |
|
Отношение Owner |
|
Отношения PropertyForRent и Owner находятся в третьей нормальной форме, поскольку в них нет никаких транзитивных зависимостей от первичного ключа.