Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по ОБД.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
622.08 Кб
Скачать

1.4. Нормализация отношений

Этот метод был разработан Коддом. Введены новые понятия:

Домен – набор значений элементов данных одного типа, т.е. один столбец таблицы.

Простой атрибут – атрибут, значения которого атомарны, т.е. неделимы.

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

Составной ключ – это ключ, который содержит несколько атрибутов.

Ключ должен обладать двумя свойствами:

  1. однозначная идентификация записей: записи должны однозначно определяться значением ключа;

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

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

Коддом выделены 3 нормальных формы отношений.

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

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

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

Пример 1.

Ненормализованное отношение R1:

Табельный номер

ФИО

Оклад

Комната

Телефон

Дети

Имя

возраст

211

Иванов Л.А.

150

12

616

Саша

Женя

Вася

10

7

3

358

Темкин М.Т.

170

12

616

Вова

5

360

Кошкин В.К.

240

5

306

Женя

Вова

8

6

1НФ:

Табельный номер родителя

Имя ребенка

Возраст ребенка

ФИО

Оклад

Комната

Телефон

211

Саша

10

Иванов Л.А.

150

12

616

211

Женя

7

Иванов Л.А.

150

12

616

211

Вася

3

Иванов Л.А.

150

12

616

358

Вова

5

Темкин М.Т.

170

12

616

360

Женя

8

Кошкин В.К.

240

5

306

360

Вова

6

Кошкин В.К.

240

5

306

Ненормализованное отношение легко сделать нормализованным. Такое представление может привести к изменению ключа.

1.4.2. В т о р а я н о р м а л ь н а я ф о р м а

Ф у н к ц и о н а л ь н а я з а в и с и м о с т ь

Задавая отношения над элементами данных, разработчик должен интересоваться тем, какие из атрибутов объекта являются зависимыми. Термин функциональная зависимость означает следующее: атрибут В отношения R функционально зависит от атрибута А того же отношения, если в каждый момент времени каждому значению атрибута А соответствует не более чем одно значение атрибута В, связанного с А в отношении R.

Утверждения что В функционально зависит от А, означает то же самое, что А определяет В, т.е. если в какой-то момент времени известно значение А, то можно получить и значение В.

Рассмотрим функциональные зависимости примера А:

  1. Таб. Номер функционально зависит от ФИО, и одновременно ФИО функционально зависит от таб. номера:

Табельный номер < - > ФИО

Действительно, каждому сотруднику ставится в соответствие только один таб. номер, а конкретный таб. номер в определенный момент времени соответствует только одному сотруднику.

  1. номер комнаты функционально зависит от ФИО, если сотрудник имеет рабочее место в одной комнате:

ФИО < - > номер комнаты

  1. если в каждой комнате установлен один телефон, то номер телефона функционально зависит от номера комнаты:

номер комнаты < - > номер телефона

Пример 2.

Номер *

служащего

Имя *

Служащего

Зарплата

Номер

Проекта

Дата

окончания

* - отмечены основные атрибуты (элементы возможных ключей)

Функциональные зависимости этого отношения:

  1. номер служащего < - > имя служащего;

  2. зарплата - > имя служащего

или

зарплата - > номер служащего;

  1. номер проекта - > имя служащего

или

номер проекта - > имя служащего

или

номер проекта - > номер служащего

  1. дата окончания - > имя служащего

или

дата окончания - > номер служащего

или

дата окончания - > номер проекта

Атрибут НОМЕР-СЛУЖАЩЕГО не является функционально зависимым от атрибута ЗАРПЛАТА, т.к. несколько служащих могут иметь одинаковую зарплату. Аналогично НОМЕР СЛУЖАЩЕГО не является функционально зависимым от атрибута НОМЕР ПРОЕКТА; атрибут ДАТА ОКОНЧАНИЯ наоборот обладает такой зависимостью. Никакие другие атрибуты не являются зависимыми от атрибута НОМЕР ПРОЕКТА. Эти функциональные зависимости более ясно можно представить с помощью диаграммы: