Третья нормальная форма
Для введения понятия третьей нормальной формы сначала дается определение транзитивной зависимости. Если для атрибутов А, В и С некоторого отношения существуют за висимости вида А—>В и В—>С, то говорят, что атрибут С транзитивно зависит от атрибута А через атрибут В (при условии, что атрибут А функционально не зависит ни от атрибута В, ни от атрибута С). Транзитивная зависимость является описанием такого типа функциональной зависимости, которая возникает при наличии следующих функциональных зависимостей между атрибутами А, В и С: А->В и В—>С. В данном случае транзитивная зависимость А—>С осуществляется через атрибут В. Это утверждение справедливо только в том случае, если атрибут А функционально не зависит от атрибутов В и С. Дадим определение третьей нормальной формы 3 НФ – это отношение, которое находится в первой и второй нормальныхформах и не имеет не входящих в первичный ключ атрибутов, которые находились бы в транзитивной функциональной зависимости от этого первичного ключа. Пример. Пусть R = {РЕЙС, ДАТА, КОД-ПИЛОТА, ИМЯ} и множество функциональных зависимостей F= {РЕЙС ДАТА→ КОД-ПИЛОТА, ИМЯ; КОД-ПИЛОТА→ ИМЯ, ИМЯ→КОД-ПИЛОТА}. Атрибут ИМЯ является транзитивно зависимым от РЕЙС и ДАТА, так как РЕЙС, ДАТА → КОД-ПИЛОТА, КОД-ПИЛОТА →РЕЙС ДАТА и КОД-ПИЛОТА → ИМЯ.
Отношение R находится в третьей нормальной форме (ЗНФ) относительно множества функциональных зависимостей F, если оно находится в 1НФ и ни один из непервичных атрибутов в R не является транзитивно зависимым от ключа для R. ПРИМЕР. Рассмотрим отношение КЛИЕНТ_АРЕНДА Таблица 6.Отношение КЛИЕНТ_АРЕНДА
Отношение находится в 1НФ. В качестве первичного ключа выделим атрибуты: {Номер клиента, Номер объекта недвижимости}. Отношение обладает следующими функциональными зависимостями: Номер клиента, Номер объекта недвижимостиàНачало аренды, Конец аренды Номер клиентаàИмя клиента Номер объекта недвижимостиàАдрес недвижимости, Арендная плата, Номер владельца, ФИО владельца Номер владельцаàФИО владельца Номер клиента, Начало арендыàНомер объекта недвижимости, Адрес недвижимости, Конец аренды, Арендная плата, Номер владельца, ФИО владельца Номер объекта недвижимости, Начало арендыàНомер клиента, ФИО клиента, Конец аренды (Первичный ключ) Рис.2. Функциональные зависимости отношения КЛИЕНТ_АРЕНДА
FD1: Номер клиента, Номер объекта недвижимости → Начало аренды, Конец аренды (первичный ключ) FD2: Номер клиента → ФИО клиента (частичная зависимость) FD3: Номер объекта недвижимости → Адрес недвижимости, Арендная плата, Номер владельца, ФИО владельца (частичная зависимость) FD4: Номер владельца → ФИО владельца (транзитивная зависимость) FD5: Номер клиента, Начало аренды → Номер объекта недвижимости, Адрес недвижимости, Конец аренды, Арендная плата, Номер владельца, ФИО владельца (потенциальный ключ) FD6: Номер объекта недвижимости, Начало аренды → Номер клиента, ФИО клиента, Конец аренды (потенциальный ключ) Найдем хотя бы один случай частичной зависимости от первичного ключа. Например, зависимость FD -2. Атрибут ФИО клиента зависит только от атрибута Номера клиента, т.е. имеет место зависимость от части ключа. Кроме того, атрибуты объекта недвижимости (Адрес, Арендная плата, Номер владельца, ФИО владельца) также частично зависят от первичного ключа, но в этом случае от атрибута Номер объекта недвижимости (см. Ф3).Атрибуты {Начало аренды, Конец аренды} полностью функционально зависят от первичного ключа в целом (см. Ф1). Ф4 –транзитивная зависимость. Это типичный пример транзитивной зависимости, которая имеет место при наличии зависимости не входящего в первичный ключ атрибута (Имя владельца) от одного или нескольких других атрибутов, также не входящих в первичный ключ (Номер владельца). Обнаружение частичных зависимостей внутри отношения КЛИЕНТ_АРЕНДА означает, что данное отношение не находится в 2 НФ. Для преобразования его в 2 НФ необходимо создать новые отношения, причем так, чтобы атрибуты, не входящие в первичный ключ, были перемещены в них вместе с копией части первичного ключа, от которой они функционально зависят. Для преобразования отношения КЛИЕНТ_АРЕНДА в 2НФ создадим три новых отношения: КЛИЕНТ, АРЕНДА, СВОЙСТВО_СОБСТВЕННОСТИ, в которых каждый атрибут, не входящий в первичный ключ, полностью функционально зависит от первичного ключа отношения: КЛИЕНТ (Номер клиента, ФИО клиента) АРЕНДА(Номер клиента, Номер объекта недвижимости, Начало аренды, Конец аренды) СВОЙСТВО_СОБСТВЕННОСТИ(Номер объекта недвижимости, Адрес недвижимости, Арендная плата, Номер владельца, ФИО владельца)
Таблица 7. Отношение КЛИЕНТ
Таблица 8. Отношение АРЕНДА
Таблица 9. Отношение СВОЙСТВО_СОБСТВЕННОСТИ
Рассмотрим функциональные зависимости, существующие в отношениях КЛИЕНТ, АРЕНДА, СВОЙСТВО_СОБСТВЕННОСТИ Отношение КЛИЕНТ Fd2: Номер клиента → ФИО клиента Отношение АРЕНДА FD1: Номер клиента, Номер объекта недвижимости → Начало аренды, Конец аренды FD5*: Номер клиента, Начало аренды → Номер объекта недвижимости, Конец аренды FD6*: Номер объекта недвижимости, Начало аренды → Номер клиента, Конец аренды Отношение СВОЙСТВО_СОБСТВЕННОСТИ FD3: Номер объекта недвижимости → Адрес недвижимости, Арендная плата, Номер владельца, ФИО владельца FD4: Номер владельца → ФИО владельца Все, не входящие в первичный ключ атрибуты отношений КЛИЕНТ и АРЕНДА зависимы только от их первичных ключей, следовательно эти отношения не имеют транзитивных зависимостей и находятся в 3 НФ. (* помечены зависимости, изменившиеся по сравнению с исходными) Все не входящие в первичный ключ атрибуты отношения СВОЙСТВО_СОБСТВЕННОСТИ функционально зависят от первичного ключа, за исключением атрибута ФИО владельца, который также зависит от атрибута Номер владельца (зависимость FD4). Это типичный пример транзитивной зависимости, которая имеет место при наличии зависимости не входящего в первичный ключ атрибута (ФИО_владельца) от одного или нескольких других атрибутов, также не входящих в первичный ключ (Номер_владельца). Для преобразования отношения СВОЙСТВО_СОБСТВЕННОСТИ в 3 НФ необходимо удалить указанную транзитивную зависимость путем создания двух новых отношений СВОЙСТВА_АРЕНДЫ и ВЛАДЕЛЕЦ, которые представлены в таблицах: Таблица 10. Отношение СВОЙСТВА_АРЕНДЫ
Таблица 11. Отношение ВЛАДЕЛЕЦ
Приведенные отношения находятся в 3 НФ,т.к. в них нет никаких транзитивных зависимостей от первичного ключа. Таким образом, исходное отношение КЛИЕНТ_АРЕНДА было разбито на 4 отношения, каждое из которых находится в 3НФ: КЛИЕНТ (Номер клиента, ФИО клиента) АРЕНДА(Номер клиента, Номер объекта недвижимости, Начало аренды, Конец аренды) СВОЙСТВА_АРЕНДЫ (Номер объекта недвижимости, Адрес недвижимости, Арендная плата, Номер владельца) ВЛАДЕЛЕЦ (Номер владельца, ФИО владельца)
Исходное отношение КЛИЕНТ_АРЕНДА может быть восстановлено путем соединения указанных 4-х отношений, за счет использования первичных и внешних ключей. Например, атрибут Номер владельца является первичным ключом отношения ВЛАДЕЛЕЦ, и кроме того, присутствует в отношении СВОЙСТВА_СОБСТВЕННОСТИ как внешний ключ. Рис. 3. Этапы нормализации отношения Клиент_Аренда
|