Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
90
Добавлен:
10.02.2015
Размер:
2.04 Mб
Скачать

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

Очень часто первичный ключ отношения включает несколько атрибутов (в таком случае его называют составным). При этом вводится понятие полной функциональной зависимости.

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

Пусть (X,Y) – возможный ключ отношения R: (X,Y)(B1,C1), но поля B1,... зависят от X (части возможного ключа), т.е. XB1,... Тогда R = [X,B1,...](R) * [X,Y,C1,...](R), где C1,... – остальные атрибуты отношения R. Это разложение отношения R на два отношения [X,B1,...](R) и [X,Y,C1,...](R) устраняет (внутритабличную) зависимость XB1,... от части ключа. Причем естественное соединение этих двух отношений точно совпадает с исходным отношением. Такое разложение называется декомпозицией без потерь.

Рассмотрим следующий пример схемы отношения:

СОТРУДНИКИ-ОТДЕЛЫ-ПРОЕКТЫ

(СОТР_ИМЯ, СОТР_ЗАРП, ОТД_НОМЕР, ПРО_НОМЕР, СОТР_ЗАДАН)

СОТР_ИМЯ

СОТР_ЗАРП

ОТД_НОМЕР

ПРО_НОМЕР

СОТР_ЗАДАН

Козлов

10000

Отдел 2

Проект 2

Анализ данных

Козлов

10000

Отдел 2

Проект 3

Проектирование

Иванов

9000

Отдел 3

Проект 2

Программирование

Максимов

10000

Отдел 2

Проект 1

Анализ данных

Иванов

9000

Отдел 3

Проект 1

Анализ данных

Первичный ключ: СОТР_ИМЯ, ПРО_НОМЕР

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

СОТР_ИМЯ СОТР_ЗАРП

СОТР_ИМЯ ОТД_НОМЕР

ОТД_НОМЕР СОТР_ЗАРП

СОТР_ИМЯ, ПРО_НОМЕР СОТР_ЗАДАН

Как видно, хотя первичным ключом является составной атрибут СОТР_ИМЯ, ПРО_НОМЕР, атрибуты СОТР_ЗАРП и ОТД_НОМЕР функционально зависят от части первичного ключа, атрибута СОТР_ИМЯ. В результате мы не сможем вставить в отношение СОТРУДНИКИ-ОТДЕЛЫ-ПРОЕКТЫ кортеж, описывающий сотрудника, который еще не выполняет никакого проекта (первичный ключ не может содержать неопределенное значение). При удалении кортежа мы не только разрушаем связь данного сотрудника с данным проектом, но утрачиваем информацию о том, что он работает в некотором отделе. При переводе сотрудника в другой отдел мы будем вынуждены модифицировать все кортежи, описывающие этого сотрудника, или получим несогласованный результат.

Можно произвести следующую декомпозицию отношения СОТРУДНИКИ-ОТДЕЛЫ-ПРОЕКТЫ в два отношения СОТРУДНИКИ-ОТДЕЛЫ и СОТРУДНИКИ-ПРОЕКТЫ:

СОТРУДНИКИ-ОТДЕЛЫ (СОТР_ИМЯ, СОТР_ЗАРП, ОТД_НОМЕР)

СОТР_ИМЯ

СОТР_ЗАРП

ОТД_НОМЕР

Козлов

10000

Отдел 2

Иванов

9000

Отдел 3

Максимов

10000

Отдел 2

Первичный ключ: СОТР_ИМЯ

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

СОТР ИМЯ  СОТР_ЗАРП

СОТР ИМЯ  ОТД_НОМЕР

ОТД_НОМЕР  СОТР_ЗАРП

СОТРУДНИКИ-ПРОЕКТЫ (СОТР ИМЯ, ПРО_НОМЕР, СОТР_ЗАДАН)

СОТР ИМЯ

ПРО_НОМЕР

СОТР_ЗАДАН

Козлов

Проект 2

Анализ данных

Козлов

Проект 3

Проектирование

Иванов

Проект 2

Программирование

Максимов

Проект 1

Анализ данных

Иванов

Проект 1

Анализ данных

Первичный ключ: СОТР ИМЯ, ПРО_НОМЕР

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

СОТР ИМЯ, ПРО_НОМЕР  CОТР_ЗАДАН

Каждое из этих двух отношений находится в 2NF, и в них устранены отмеченные выше аномалии (легко проверить, что все указанные операции выполняются без проблем).

Если допустить наличие нескольких ключей, то определение 2NF примет следующий вид:

Отношение R находится во второй нормальной форме (2NF) в том и только в том случае, когда оно находится в 1NF, и каждый неключевой атрибут полностью зависит от каждого ключа R.

Соседние файлы в папке Базы данных(1 курс, 2 семестр,2011-2012)