Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы к экзамену по БД (ВФ) / !Все ответы по БД v0.2.13.docx
Скачиваний:
174
Добавлен:
10.05.2014
Размер:
3.32 Mб
Скачать

19. Третья нормальная форма. Нормальная форма Бойса-Кодда. Определение. Аномалии, возникающие при нарушении. Примеры нарушения и нормализации.

Отношение находится в 3НФ тогда и только тогда, когда оно находится в 2НФ, и для каждого не ключевого атрибута отсутствует транзитивная зависимость от первичного ключа.

Транзитивная зависимость. Если для атрибутов A, B и C некоторого отношения существуют зависимости вида AB и BC, это означает, что атрибут C транзитивно зависит от атрибута A через атрибут B (при условии, что атрибут А функционально не зависит ни от атрибута B, ни от атрибута C).

Пример. Есть таблица ПОСТАВЩИК (Sid, SName, City, Code). В ней следующие зависимости: Sid à SName, Sid à City, City à Code. Так как код города зависит от города, то выявляется транзитивная зависимость Sid à Code.

Возникают аномалии 3НФ:

  • Аномалия вставки: невозможно сохранить данные о новом городе, пока не будет введена запись о новом поставщике с новым городом (первичный ключ не может содержать неопределённые значения);

  • Аномалия удаления: при удалении последнего поставщика из данного города теряется информация о городе вообще;

  • Аномалия обновления: при изменении кода города или названия города у одного поставщика придётся изменить эти поля у всех поставщиков с данным городом и кодом. Также при изменении кода города придётся изменить и название города, и наоборот – при изменении названия города придётся изменить код города.

Чтобы нормализовать к 3НФ, надо произвести декомпозицию (разбиение) таблицы на две: ПОСТАВЩИК (Sid, SName, City) и ГОРОД (City, Code).

Отношение находится в НФБК тогда и только тогда, когда каждый его детерминант является потенциальным ключом. Для проверки принадлежности отношения к НФБК необходимо найти все его детерминанты и убедиться в том, что они являются потенциальными ключами. Детерминантом является один атрибут или группа атрибутов, от которой полностью функционально зависит другой атрибут.

Различие между ЗНФ и НФБК заключается в том, что функциональная зависимость АВ допускается в отношении ЗНФ, если атрибут В является первичным ключом, а атрибут А не обязательно является потенциальным ключом. Тогда как в отношении НФБК эта зависимость допускается только тогда, когда атрибут А является потенциальным ключом. Следовательно, нормальная форма Бойса-Кодда является более строгой версией формы ЗНФ, поскольку каждое отношение НФБК является также отношением ЗНФ, но не всякое отношение ЗНФ является отношением НФБК.

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

Отношение находится в нормальной форме Бойса-Кодда (НФБК), если оно находится в 3НФ, и в нем отсутствовали зависимости ключевых атрибутов от неключевых атрибутов

Пример. Пусть имеется переменная отношения СЛУЖ_ПРО_ЗАДАН1 {СЛУ_НОМ, СЛУ_ИМЯ, ПРО_НОМ, СЛУ_ЗАДАН} с множеством FD, показанным на рисунке 1 слева.

В отношении СЛУЖ_ПРО_ЗАДАН1 служащие уникально идентифицируются как по номерам удостоверений, так и по именам. Следовательно, существуют FD СЛУ_НОМСЛУ_ИМЯ и СЛУ_ИМЯСЛУ_НОМ. Но один служащий может участвовать в нескольких проектах, поэтому возможными ключами являются {СЛУ_НОМ, ПРО_НОМ} и {СЛУ_ИМЯ, ПРО_НОМ}. В таблице ниже показано возможное значение переменной отношения СЛУЖ_ПРО_ЗАДАН1.

СЛУ_НОМ

СЛУ_ИМЯ

ПРО_НОМ

СЛУ_ЗАДАН

2934

Иванов

1

A

2941

Иваненко

2

B

2934

Иванов

2

B

2941

Иваненко

1

A

Очевидно, что, хотя в отношении СЛУЖ_ПРО_ЗАДАН1 все FD неключевых атрибутов от возможных ключей являются минимальными и транзитивные FD отсутствуют, этому отношению свойственны аномалии обновления. Например, в случае изменения имени служащего требуется обновить атрибут СЛУ_ИМЯ во всех кортежах отношения СЛУЖ_ПРО_ЗАДАН1, соответствующих данному служащему. Иначе будет нарушена FD СЛУ_НОМСЛУ_ИМЯ, и база данных окажется в несогласованном состоянии.

Переменная отношения СЛУЖ_ПРО_ЗАДАН1 может быть приведена к BCNF путем одной из двух декомпозиций: СЛУЖ_НОМ_ИМЯ {СЛУ_НОМ, СЛУ_ИМЯ} и СЛУЖ_НОМ_ПРО_ЗАДАН {СЛУ_НОМ, ПРО_НОМ, СЛУ_ЗАДАН} с множеством FD и значениями, показанными на рисунке слева и в таблицах ниже, и СЛУЖ_НОМ_ИМЯ {СЛУ_НОМ, СЛУ_ИМЯ} и СЛУЖ_ИМЯ_ПРО_ЗАДАН {СЛУ_ИМЯ, ПРО_НОМ, СЛУ_ЗАДАН} (FD и значения результирующих переменных отношений выглядят аналогично).

Очевидно, что каждая из декомпозиций устраняет трудности, связанные с обновлением отношения СЛУЖ_ПРО_ЗАДАН1.

Значение переменной отношения СЛУЖ_НОМ_ИМЯ

Значение переменной отношения СЛУЖ_ПРО_ЗАДАН

СЛУ_НОМ

СЛУ_ИМЯ

СЛУ_НОМ

ПРО_НОМ

ПРО_ЗАДАН

2934

Иванов

2934

1

A

2941

Иваненко

2941

2

B

2934

2

B

2941

1

A