Первая нормальная форма
Реляционная таблица находится в первой нормальной форме (1НФ), если значения в таблице являются атомарными для каждого атрибута таблицы. Это означает, что никакое значение атрибута не может быть множеством значений или, как иногда говорят повторяющейся группой. Таблица 8.2. Таблица, нарушающая 1НФ
Данная таблица не соответствует 1НФ, т.к. значения атрибута Код здания не являются атомарными. Для первого и второго кортежей значение Код здания может иметь несколько значений. Чтобы таблица удовлетворяла 1НФ, она должна выглядеть так: Таблица 8.3. Таблица в 1НФ
Следующие две нормальные формы вторая и третья относятся к реляционным таблицам, ограниченным функциональными зависимостями. Функциональные зависимости Функциональные зависимости (ФЗ) накладывают дополнительные ограничения на реляционную схему. Основная идея состоит в том, что значение одного атрибута в кортеже однозначно определяет значение другого атрибута. В таблице Работник Код работника однозначно определяет ФИО, Тип специальности. Эти функциональные зависимости записываются так: ФЗ: Код работника → ФИО; Код работника → Тип специальности Символ →; читается «функционально определяет» Атрибут в левой части ФЗ называется детерминантом, т.к. его значение определяет значение атрибута в правой части. Ключ таблицы является детерминантом, т.к. его значение однозначно определяет значение каждого атрибута таблицы. Вторая нормальная форма Вторая и третья нормальные формы касаются отношений между ключевыми и не ключевыми атрибутами. Вторая нормальная форма. Никакие не ключевые атрибуты не являются функционально зависимыми лишь от части ключа. Т.о. 2НФ может оказаться нарушенной, если ключ составной. Таблица 8.4. Таблица, нарушающая 2НФ
Ключ состоит из двух атрибутов. ФИО определяется атрибутом Код работника и, следовательно, функционально зависит от части ключа. Для определения имени работника нужно знать Код работника. Таблица не удовлетворяет 2НФ, могут возникнуть проблемы: 1. Имя работника повторяется в каждой строке, относящейся к назначению этого работника; 2. при изменении имени требуется обновить все строки, содержащие записи о назначениях этого работника; 3. из-за такой избыточности может возникнуть несоответствие данных, когда в разных строках содержатся разные имена для одного и того же работника; 4. если в какой-то момент времени работник не имеет назначений, то может не оказаться строки, в которой можно хранить имя работника. Это аномалия ввода. Для того чтобы решить эти проблемы, таблицу необходимо разбить на две реляционные таблицы, каждая из которых удовлетворяет 2НФ. Работник (Код работника, ФИО) Назначения (Код работника, Код здания, Дата начала). Эти две меньшие таблицы называются проекциями исходной таблицы. Процесс разбиения состоит из следующих шагов: 1. создается новая таблица, атрибутами которой будут атрибуты исходной таблицы, входящую в противоречащую правилу ФЗ. Детерминант ФЗ становится ключом новой таблицы; 2. Атрибут, стоящий справа в ФЗ, исключается из исходной таблицы; 3. если более одной ФЗ нарушают 2НФ, то шаги 1 и 2 повторяются для каждой такой ФЗ; 4. если один и тот же детерминант входит в несколько ФЗ, то все функционально зависящие от него атрибуты помещаются в качестве не ключевых атрибутов в таблицу, ключом которой будет детерминант.
|