Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
раздел 4(все).doc
Скачиваний:
9
Добавлен:
13.09.2019
Размер:
159.74 Кб
Скачать

II. Вторая нормальная форма

Таблица находится во второй нормальной форме, если она находится в первой нормальной форме, и при этом любой её атрибут, не входящий в состав возможного ключа,функционально полно зависит от каждого возможного ключа. Функционально полная зависимость означает, что атрибут функционально зависит от всего составного ключа, но при этом не находится в функциональной зависимости от какой-либо из входящих в него атрибутов (частей). Или другими словами: в 2NF нет неключевых атрибутов, зависящих от части составного ключа (плюс выполняются условия 1NF).

Пример приведения таблицы ко второй нормальной форме

Пусть Сотрудник и Должность вместе образуют первичный ключ в такой таблице:

Сотрудник

Должность

Зарплата

Наличие компьютера

Гришин

Кладовщик

20000

Нет

Васильев

Программист

40000

Есть

Васильев

Кладовщик

25000

Нет

Зарплату сотруднику каждый начальник устанавливает сам, но её границы зависят от должности. Наличие же компьютера у сотрудника зависит только от должности, то есть зависимость от первичного ключа неполная.

В результате приведения к 2NF получаются две таблицы:

Сотрудник

Должность

Зарплата

Гришин

Кладовщик

20000

Васильев

Программист

40000

Васильев

Кладовщик

25000

Здесь первичный ключ, как и в исходной таблице, составной, но единственный не входящий в него атрибут Зарплата зависит теперь от всего ключа, то есть полно.

Должность

Наличие компьютера

Кладовщик

Нет

Программист

Есть

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

Третья нормальная форма является достаточной при решении большинства практических задач, и процесс проектирования реляционной базы данных, как правило, заканчивается приведением к ней. 3НФ была изначально сформулирована Э. Ф. Коддом в 1971 году.

Согласно определению Кодда, таблица находится в 3НФ тогда и только тогда, когда выполняются следующие условия:

  • Отношение R (таблица) находится во второй нормальной форме;

  • Каждый непервичный атрибут R находится в нетранзитивной (то есть прямой) зависимости от каждого ключа R.

Непервичный (неключевой) атрибут R — это атрибут, который не принадлежит ни одному из возможных (альтернативных) ключей R. Транзитивная зависимость — это функциональная зависимость, при которой X → Z (X определяет Z) не напрямую, а посредством отношения X → Y и Y → Z (отношение Y → X не является обязательным условием).

Определение 3НФ, эквивалентное определению Кодда, но по-другому сформулированное, дал Карло Заниоло в 1972 году. Согласно ему, таблица находится в 3НФ тогда и только тогда, когда для каждой из ее функциональных зависимостей X → A выполняется хотя бы одно из следующих условий:

  • Х содержит А (то есть X → A — тривиальная функциональная зависимость)

  • Х — суперключ

  • А — первичный атрибут (то есть А входит в состав альтернативного ключа).

Определение Заниоло четко определяет разницу между 3НФ и более строгой нормальной формой Бойса-Кодда (НФБК): НФБК исключает третье условие («А — первичный атрибут»).

Исходная таблица:

Фамилия

Отдел

Телефон

Гришин

1

11-22-33

Васильев

1

11-22-33

Петров

2

44-55-66

Фамилия

Отдел

Гришин

1

Васильев

1

Петров

2

В результате приведения к 3НФ получаются две таблицы:

Отдел

Телефон

1

11-22-33

2

44-55-66


Нормальная форма Бойса-Кодда

 Иногда нормальную форму Бойса-Кодда называют усиленной третьей нормальной формой, поскольку она во всех отношениях сильнее (строже) по сравнению с ранее определённой ЗНФ.

Названа в честь Рэя Бойса и Эдгара Кодда, хотя Кристофер Дейт указывает, что на самом деле строгое определение «третьей» нормальной формы, эквивалентное определению нормальной формы Бойса-Кодда, впервые было дано Иэном Хитом (англ. Ian Heath) в 1971 году, поэтому данную форму следовало бы называть «нормальной формой Хита»

ПРИМЕР: Предположим, создаётся таблица бронирования для теннисных кортов на день: {Номер корта, Время начала, Время окончания, Тариф, Член клуба}. Тариф зависит от выбранного корта и членства в клубе.

Таким образом, возможны следующие составные первичные ключи: {Номер корта, Время начала}{Номер корта, Время окончания}{Тариф, Время начала}{Тариф, Время окончания}.

Таблица соответствует второй и третьей нормальной форме, так как атрибуты, не входящие в состав первичного ключа, зависят от составного первичного ключа целиком (2NF) и нет транзитивных зависимостей (3NF).

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

Можно улучшить структуру, разбив таблицу на две: {Номер корта, Время начала, Время окончания, Член клуба} и {Тариф, Номер корта, Член клуба}. Данное отношение будет соответствовать BCNF.