- •Раздел 4. Базы данных
- •Раздел 4. Базы данных
- •Системы баз данных. Обзор субд с точки зрения возможностей пользователя. Требования к субд. Архитектура построения субд
- •Общая характеристика реляционной модели данных. Типы данных.
- •Первичный ключ. Внешний ключ. Методы обеспечения целостности ключей.
- •Нормализация отношений. Нормальные формы. Достоинства и недостатки нормализации.
- •II. Вторая нормальная форма
- •III. Третья нормальная форма
- •IV. Четвёртая нормальная форма (4nf)
- •V. Пятая нормальная форма (5nf)
- •Доменно-ключевая нормальная форма (dknf)
- •VI. Шестая нормальная форма (6nf)
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 |
Отдел |
Телефон |
1 |
11-22-33 |
2 |
44-55-66 |
Нормальная форма Бойса-Кодда
Иногда нормальную форму Бойса-Кодда называют усиленной третьей нормальной формой, поскольку она во всех отношениях сильнее (строже) по сравнению с ранее определённой ЗНФ.
Названа в честь Рэя Бойса и Эдгара Кодда, хотя Кристофер Дейт указывает, что на самом деле строгое определение «третьей» нормальной формы, эквивалентное определению нормальной формы Бойса-Кодда, впервые было дано Иэном Хитом (англ. Ian Heath) в 1971 году, поэтому данную форму следовало бы называть «нормальной формой Хита»
ПРИМЕР: Предположим, создаётся таблица бронирования для теннисных кортов на день: {Номер корта, Время начала, Время окончания, Тариф, Член клуба}. Тариф зависит от выбранного корта и членства в клубе.
Таким образом, возможны следующие составные первичные ключи: {Номер корта, Время начала}, {Номер корта, Время окончания}, {Тариф, Время начала}, {Тариф, Время окончания}.
Таблица соответствует второй и третьей нормальной форме, так как атрибуты, не входящие в состав первичного ключа, зависят от составного первичного ключа целиком (2NF) и нет транзитивных зависимостей (3NF).
Тем не менее, существует функциональная зависимость тарифа от номера корта. То есть, по ошибке можно нарушить логическую целостность и, например, приписать тарифPremium для первого корта, хотя тариф Premium может относиться только ко второму корту.
Можно улучшить структуру, разбив таблицу на две: {Номер корта, Время начала, Время окончания, Член клуба} и {Тариф, Номер корта, Член клуба}. Данное отношение будет соответствовать BCNF.