Вторая нормальная форма
Вторая и третья нормальные формы касаются отношений между ключевыми и неключевыми атрибутами. Реляционная таблица находится во второй нормальной форме (2НФ), если все неключевые атрибуты являются функционально зависимыми от всего ключа. Таким образом, 2НФ может оказаться нарушена только в том случае, когда ключ составной, то есть ключом является набор из нескольких атрибутов.
Рассмотрим реляционную таблицу 3.3. В ней ключ состоит из атрибутов № работника и № здания. Фамилия
определяется атрибутом № работника
и, следовательно, функционально зависит от части ключа. Это означает, что для определения фамилии работника достаточно знать № работника. Таким образом, таблица не удовлетворяет 2НФ. Если оставить эту таблицу в таком виде, не приведя ее к 2НФ, то могут возникнуть следующие проблемы:
1. Фамилия работника повторяется в каждой строке, относящейся к назначению этого работника.
2. Если фамилия работника изменяется, то требуется обновить все строки, содержащие записи о назначениях этого работника. Это аномалия изменения данных.
3. Из-за такой избыточности может возникнуть несоответствие данных, когда в разных строках содержатся разные имена для одного и того же работника.
4. Если в какой-то момент времени работник не имеет назначений, то может не оказаться строки, в которой можно хранить имя работника. Это аномалия ввода данных.
Таблица 3.3. «Назначение 1»
№ работника | №
здания |
| Дата начала | Фамилия | |||
1235 | 312 | 10.10 | Петров | ||||
1412 | 312 | 01.10 | Смирнов | ||||
1235 | 515 | 17.10 | Петров | ||||
1412 | 460 | 08.12 | Смирнов | ||||
1412 | 435 | 15.10 | Смирнов |
Для того чтобы решить эти проблемы, таблицу необходимо разбить на две реляционные таблицы, каждая из которых удовлетворяет 2НФ.
Таблица 3.4. «Работник»
№ работника |
Фамилия |
1235 |
Петров |
1412 |
Смирнов |
№ работника |
№ здания |
Дата начала |
1235 |
312 |
10.10 |
1412 |
312 |
01.10 |
1235 |
515 |
17.10 |
1412 |
460 |
08.12 |
1412 |
435 |
15.10 |
Процесс разбиения на две 2НФ-таблицы состоит из нескольких простых шагов:
1. Создается новая таблица, атрибутами которой будут атрибуты исходной таблицы, входящие в противоречащую правилу ФЗ. Детерминант ФЗ становится ключом новой таблицы.
2. Атрибут, стоящий в правой части ФЗ, исключается из исходной таблицы.
3. Если более одной ФЗ нарушают 2НФ, то шаги 1 и 2 повторяются для каждой такой ФЗ.
4. Если один и тот же детерминант входит в несколько ФЗ, то все функционально зависящие от него атрибуты помещаются в качестве неключевых атрибутов в таблицу, ключом которой будет детерминант.