Функциональные зависимости между атрибутами отношения и их свойства, аксиомы Армстронга, нормальные формы отношений

Можно сказать, что функциональные зависимости представляют собой связи типа "один ко многим", существующие внутри отношения. Если даны два атрибута X и Y некоторого отношения, то говорят, что Y функционально зависит от X, если в любой момент времени каждому значению X соответствует ровно одно значение Y, в то же время одному значению Y могут соответствовать разные значения X. Функциональная зависимость обозначается X → Y.

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

Левую и правую части символической записи функциональной зависимости иногда называют, соответственно, детерминантом и зависимой частью. Как говорится в определении, детерминант и зависимая часть являются множествами атрибутов. Когда множество содержит только один атрибут, оно называется одноэлементным множеством.

Функциональная зависимость A-В является полной функциональной зависимостью, если удаление какого-либо атрибута из А приводит к утрате этой зависимости.

Если для атрибутов А, В и С некоторого отношения существуют зависимости вида А-В и В-С, то говорят, что атрибут С транзитивно зависит от атрибута А через атрибут В (при условии, что атрибут А функционально не зависит ни от атрибута В, ни от атрибута С).

Многозначная зависимость А → → В является тривиальной, если В является подмножеством А или объединение AB атрибутов A и B составляет весь заголовок. По-другому, зависимость называется тривиальной, если она не может не выполняться.

Нормальные формы

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

Первая нормальная форма:

- запрещает повторяющиеся столбцы (содержащие одинаковую по смыслу информацию);

- запрещает множественные столбцы (содержащие значения типа списка и т.п.);

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

Исходная ненормализованная (то есть не являющаяся правильным представлением некоторого отношения) таблица:

Функциональные зависимости между атрибутами отношения и их свойства, аксиомы Армстронга, нормальные формы отношений - student2.ru Функциональные зависимости между атрибутами отношения и их свойства, аксиомы Армстронга, нормальные формы отношений - student2.ru

Таблица, приведённая к 1NF (являющаяся правильным представлением некоторого отношения):

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

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

Функциональные зависимости между атрибутами отношения и их свойства, аксиомы Армстронга, нормальные формы отношений - student2.ru

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

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

Функциональные зависимости между атрибутами отношения и их свойства, аксиомы Армстронга, нормальные формы отношений - student2.ru

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

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

Рассмотрим в качестве примера следующее отношение:

Функциональные зависимости между атрибутами отношения и их свойства, аксиомы Армстронга, нормальные формы отношений - student2.ru Функциональные зависимости между атрибутами отношения и их свойства, аксиомы Армстронга, нормальные формы отношений - student2.ru

В отношении атрибут «Сотрудник» является первичным ключом. Личных телефонов у сотрудников нет, и телефон сотрудника зависит исключительно от отдела.

Таким образом, в отношении существуют следующие функциональные зависимости: Сотрудник → Отдел, Отдел → Телефон, Сотрудник → Телефон.

Зависимость Сотрудник → Телефон является транзитивной, следовательно, отношение не находится в 3NF.

В результате декомпозиции отношения R1 получаются два отношения, находящиеся в 3NF (это отношение R2 и R3).

Исходное отношение R1 при необходимости легко получается в результате операции соединения отношений R2 и R3.

4. Нормальная форма Бойса-Кодда (НФБК, BCNF) – переменная отношения находится в нормальной форме Бойса-Кодда тогда и только тогда, когда детерминанты всех ее функциональных зависимостей являются потенциальными ключами. Различие между 3НФ и НФБК заключается в том, что функциональная зависимость A-В допускается в 3НФ-отношении, если атрибут В является первичным ключом, а атрибут А не обязательно является потенциальным ключом. Тогда как в НФБК-отношении эта зависимость допускается только тогда, когда атрибут А является потенциальным ключом.

Нормальная форма Бойса-Кодда требует, чтобы в таблице был только один потенциальный первичный ключ. Чаще всего у таблиц, находящихся в третьей нормальной форме, так и бывает, но не всегда. Если обнаружился второй столбец (комбинация столбцов), позволяющий однозначно идентифицировать строку, то для приведения к нормальной форме Бойса-Кодда такие данные надо вынести в отдельную таблицу.

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

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

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

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

5. Четвёртая нормальная форма (4NF) – отношение находится в 4NF, если оно находится в НФБК и не содержит многозначных зависимостей. То есть все многозначные зависимости являются, по сути, функциональными зависимостями от ключей отношения.

Для приведения таблицы, находящейся в нормальной форме Бойса-Кодда, к четвертой нормальной форме необходимо устранить имеющиеся в ней многозначные зависимости. То есть обеспечить, чтобы вставка / удаление любой строки таблицы не требовала бы вставки / удаления / модификации других строк этой же таблицы.

Предположим, что рестораны производят разные виды пиццы, а службы доставки ресторанов работают только в определенных районах города. Составной ключ таблицы такого отношения включает три поля: {Ресторан, Вид пиццы, Район доставки}.

Такая таблица не соответствует 4NF, так как существует многозначная зависимость:

{Ресторан} → → {Вид пиццы}

{Ресторан} → → {Район доставки}

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

Для предотвращения аномалии нужно разбить многозначную зависимость – разместить независимые факты в разных таблицах. В данном примере – {Ресторан, Вид пиццы} и {Ресторан, Район доставки}.

Наши рекомендации