Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
62
Добавлен:
01.05.2014
Размер:
669.7 Кб
Скачать

3.2. Функциональные зависимости и детерминанты

Функциональные зависимости (ФЗ) позволяют накладывать дополнительные ограничения на реляционную схему. Основная идея состоит в том, что значение одного атрибута в кортеже однозначно определяет значение другого атрибута. Например, в каждом кортеже таблицы 3.1 № работникаоднозначно определяетфамилию;№ работникаоднозначно определяетспециальность. Записываются эти две функциональные зависимости следующим образом:

ФЗ : № работника  фамилия,

ФЗ : № работника специальность.

Функциональная зависимость – значение атрибута в кортеже однозначно определяет значение другого атрибута в кортеже.

Более формально мы можем определить функциональную зависимость следующим образом: если А и В – атрибуты в таблице R, то запись

ФЗ : AВ

обозначает, что если два кортежа в таблице R имеют одно и то же значение атрибута А, то они имеют одно и то же значение атрибута В. Это определение также применимо, если А и В – множества столбцов, а не просто отдельные столбцы.

Обозначение читается «функционально определяет».

Атрибут в левой части ФЗ называется детерминантом,так как его значение однозначно определяет значение атрибута в правой части. Ключ таблицы всегда является детерминантом, так как его значение однозначно определяет значение каждого атрибута таблицы.

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

Вторая и третья нормальные формы касаются отношений между ключевыми и неключевыми атрибутами. Реляционная таблица находится во второй нормальной форме (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

Смирнов

Таблица 3.5. «Назначение»

работника

здания

Дата начала

1235

312

10.10

1412

312

01.10

1235

515

17.10

1412

460

08.12

1412

435

15.10

Эти две реляционные таблицы находятся во 2НФ и исключают перечисленные выше проблемы. Таким образом, 2НФ сокращает избыточность данных и возможность аномалий.

Процесс разбиения на две 2НФ-таблицы состоит из нескольких простых шагов:

1. Создается новая таблица, атрибутами которой будут атрибуты исходной таблицы, входящие в противоречащую правилу ФЗ. Детерминант ФЗ становится ключом новой таблицы.

2. Атрибут, стоящий в правой части ФЗ, исключается из исходной таблицы.

3. Если более одной ФЗ нарушают 2НФ, то шаги 1 и 2 повторяются для каждой такой ФЗ.

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

Соседние файлы в папке Базы данных1