Общие определения

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

 

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

 

 

Пусть задана переменная отношения r, и X и Y являются произвольными подмножествами заголовка r (“составными” атрибутами).

 

Определение 6.1. Функциональная зависимость

 

В значении переменной отношения r атрибут Y функционально зависит от атрибута X в том и только в том случае, если каждому значению X соответствует в точности одно значение Y. В этом случае говорят также, что атрибут X функционально определяет атрибут Y (X является детерминантом (определителем) для Y, а Y является зависимым от X ). Будем обозначать это как r.X ® r.Y. Конец определения.

 

Для примера будем использовать отношение СЛУЖАЩИЕ_ПРОЕКТЫ{СЛУ_НОМ,СЛУ_ИМЯ,СЛУ_ЗАРП,ПРО_НОМ,ПРОЕКТ_РУК}(рис. 6.1). Очевидно, что если СЛУ_НОМ является первичным ключом отношения СЛУЖАЩИЕ, то для этого отношения справедлива функциональная зависимость (Functional Dependency – FD) СЛУ_НОМ® СЛУ_ИМЯ.

СЛУ_НОМ СЛУ_ИМЯ СЛУ_ЗАРП ПРО_НОМ ПРОЕКТ_РУК
Иванов 22400.00 Иванов
Петров 29600.00 Иванов
Сидоров 18000.00 Иванов
Федоров 20000.00 Иванов
Иванова 22000.00 Иванов
Сидоренко 18000.00 Иваненко
Федоренко 20000.00 Иваненко
Иваненко 22000.00 Иваненко

 

Рис. 6.1. Пример возможного тела отношения СЛУЖАЩИЕ_ПРОЕКТЫ

 

На самом деле, для тела отношения СЛУЖАЩИЕ_ПРОЕКТЫв том виде, в котором оно показано на рис. 6.1, выполняются еще и следующие FD (1):

 

СЛУ_НОМ® СЛУ_ИМЯ

СЛУ_НОМ® СЛУ_ЗАРП

СЛУ_НОМ® ПРО_НОМ

СЛУ_НОМ® ПРОЕКТ_РУК

{СЛУ_НОМ,СЛУ_ИМЯ} ® СЛУ_ЗАРП

{СЛУ_НОМ,СЛУ_ИМЯ} ® ПРО_НОМ

{СЛУ_НОМ,СЛУ_ИМЯ} ® {СЛУ_ЗАРП,ПРО_НОМ}

ПРО_НОМ® ПРОЕКТ_РУК и т.д.

 

Поскольку имена всех служащих различны, то выполняются и такие FD (2):

 

СЛУ_ИМЯ® СЛУ_НОМ

СЛУ_ИМЯ® СЛУ_ЗАРП

СЛУ_ИМЯ® ПРО_НОМи т.д.

 

Более того, для примера на рис. 6.1 выполняется и FD (3)

 

СЛУ_ЗАРП ® ПРО_НОМ.

 

Однако заметим, что природа FD группы (1) отличается от природы FD групп (2) и (3). Разумно предположить, что идентификационные номера служащих должны быть всегда различны, а у каждого проекта имеется ровно один руководитель. Поэтому FD группы (1) должны быть верны для любого допустимого значения переменной отношения СЛУЖАЩИЕ_ПРОЕКТЫи могут рассматриваться как инварианты, или ограничения целостности этой переменной отношения.

 

FD группы (2) базируются на менее естественном предположении, что имена всех служащих различны, и что один служащий не может участвовать в нескольких проектах. Это соответствует действительности для примера с рис. 6.1, но возможно, что с течением времени FD группы (2) не будут выполняться для какого-либо значения переменной отношения СЛУЖАЩИЕ_ПРОЕКТЫ.

 

Наконец, FD группы (3) основана на совсем неестественном предположении, что каждый служащий участвует только в одном проекте, и что никакие два служащие, участвующие в разных проектах, не получают одинаковую зарплату. Опять же, это предположение верно для примера с рис. 6.1, но почти наверняка это является случайным совпадением.

 

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

 

Заметим, что если атрибут A отношения r является возможным ключом, то для любого атрибута B этого отношения всегда выполняется FD A ®B (в группе (1) к этим FD относятся все FD, детерминантом которых является СЛУ_НОМ). Обратите внимание, что наличие в отношении СЛУЖАЩИЕ_ПРОЕКТЫ FD ПРО_НОМ® ПРОЕКТ_РУКприводит к некоторой избыточности этого отношения. Имя руководителя проекта является характеристикой проекта, а не служащего, но в нашем случае содержится в теле отношения столько раз, сколько служащих работает над проектом.

 

Итак, мы будем иметь дело с FD, которые выполняются для всех возможных состояний тела соответствующего отношения и могут рассматриваться как ограничения целостности. Как показывает (неполный) список (1), таких зависимостей может быть очень много. Поскольку они трактуются как ограничения целостности, за их соблюдением должна следить СУБД. Поэтому важно уметь сократить набор FD до некоторого минимума, поддержка которого гарантирует выполнение всех зависимостей. Мы займемся этим в следующих подразделах.

 

Определение 6.2. Тривиальная функциональная зависимость

FD A ®B называется тривиальной, если A ÊB (т.е. множество атрибутов A включает множество B или совпадает со множеством B). Конец определения.

Очевидно, что любая тривиальная FD всегда выполняется. Например, в отношении СЛУЖАЩИЕ_ПРОЕКТЫвсегда выполняется FD {СЛУ_ЗАРП,ПРО_НОМ} ® СЛУ_ЗАРП. Частным случаем тривиальной FD является A ®A.

Поскольку тривиальные FD выполняются всегда, то их нельзя трактовать как ограничения целостности, и поэтому они не представляют интереса с точки зрения практики. Однако в теоретических рассуждениях их наличие необходимо учитывать.