
- •Новосибирская государственная академия экономики и управления
- •«Базы данных»
- •Введение
- •Основные понятия реляционной модели данных Реляционные таблицы
- •Пустые значения
- •Внешние ключи
- •Категорная целостность
- •Целостность на уровне ссылок
- •Функциональные зависимости.
- •Нормализации отношений
- •Первая нормальная форма
- •Функциональные зависимости
- •Вторая нормальная форма
- •Третья нормальная форма
- •Знф влечет 2нф влечет 1нф.
- •Четвертая нормальная форма
- •Другие нормальные формы
- •3. Методика проектирования реляцтонной бд на основе декомпазиционного алгоритма
Третья нормальная форма
Реляционная таблица имеет третью нормальную форму (ЗНФ), если для любой ФЗ: Х —> Y Х является ключом. Заметим попутно, что из определения следует, что любая таблица, удовлетворяющая ЗНФ, также удовлетворяет и 2НФ. Однако обратное неверно, в чем мы сейчас убедимся.
Третья нормальная форма (ЗНФ). Любой детерминант является ключом.
Рассмотрим таблицу WORKER' на рис. 8. Мы видим, что поскольку WORKER-ID является ключом, то в таблице имеются функциональные зависимости
ФЗ: WORKER-ID -> SKILL-TYPE
ФЗ: WORKER-ID -> BONUS-RATE
Однако также имеется функциональная зависимость
ФЗ: SKILL-TYPE -> BONUS-RATE
Ясно, что первые две функциональные зависимости удовлетворяют критерию ЗНФ, но как обстоит дело с последней? Очевидно, что SKILL-TYPE не является ключом, поэтому критерий ЗНФ нарушен. Таким образом, таблица WORKER' не удовлетворяет ЗНФ. Обратите, однако, внимание, что таблица WORKER' удовлетворяет 2НФ (иначе быть не может, так как ключ состоит из одного атрибута). Таким образом, таблица может быть в 2НФ, но не в ЗНФ.
Рис. 8. Таблица WORKER'
Чем плохи таблицы, не удовлетворяющие ЗНФ? Вызванные ими проблемы схожи с перечисленными для таблиц, нарушающих 2НФ:
1. Размер премиальных для типа специальности повторяется в каждой строке, относящейся к работнику этой специальности. Это избыточные данные, занимающие лишнее место.
2. Если размер премиальных для типа специальности изменяется, то требуется обновить каждую такую строку. Если строка удаляется, то мы можем потерять информацию о размере премиальных для данной специальности. Таким образом, таблица подвержена аномалиям обновления и удаления.
3. Если в какой-то момент времени отсутствуют работники данной специальности, то может не оказаться строки, в которой можно хранить размер премиальных. Это аномалия ввода.
К счастью, если мы установили, что таблица удовлетворяет ЗНФ, то мы можем быть уверены, что она удовлетворяет и 2НФ. Но как преобразовать реляционную схему, нарушающую ЗНФ, в набор таблиц, удовлетворяющих ЗНФ? Самый простой метод — разбиение. Им мы пользовались для преобразования таблицы, нарушающей 2НФ (ASSIGNMENT на рис. 6), в две таблицы, удовлетворяющие 2НФ (рис. 7). Теперь мы покажем, как применять процесс разбиения к таблицам, нарушающим ЗНФ.
Начнем с реляционной схемы WORKER'. Создадим новую таблицу (R1), удалив из WORKER' все атрибуты, стоящие в правой части ФЗ, нарушающие критерий ЗНФ. В нашем примере это ПРЕМИАЛЬНЫЕ (BONUS-RATE). Создадим новую таблицу, состоящую из атрибутов как из левой, так и из правой частей ФЗ, нарушающей критерий ЗНФ. В нашем примере это SKILL-TYPE и BONUS-RATE. Детерминант ФЗ SKILL-TYPE будет ключом. Если мы назовем эту новую таблицу R2, то тогда
R1 {WORKER-ID, SKILL-TYPE)
Внешний ключ: SKILL-TYPE ссылается на R2
и
R2 {SKILL-TYPE, BONUS-RATE}
схемы двух реляционных таблиц, занявших место таблицы WORKER'. Если хотя бы одна из таблиц R1 или R2 нарушает ЗНФ, то мы продолжим процесс разбиения до тех пор, пока все таблицы не будут удовлетворять ЗНФ. В нашем случае и R1, и R2 удовлетворяют ЗНФ, поэтому мы можем остановиться.
Мы разбили таблицу WORKER' на таблицы R1 и R2, каждая из которых удовлетворяет ЗНФ. Вы должны проверить, что обе полученные таблицы действительно удовлетворяют ЗНФ. Пожалуйста, обратите внимание, что SKILL-TYPE является внешним ключом в таблице R2.
Поскольку каждая таблица по определению удовлетворяет 1НФ, а также, поскольку ЗНФ-таблицы всегда удовлетворяют 2НФ, то верна следующая цепочка импликаций: