Ранее были рассмотрены принципы объединения элементов данных в логические записи и показано, что все элементы данных в логической записи связаны между собой. В реляционных моделях существует аналогичное понятие функциональной зависимости атрибутов. Говорят, что атрибут В функционально зависит от атрибута А, если в каждый момент времени каждому значению атрибута А соответствует только одно, связанное с ним значение атрибута В и обозначают А В. Это же выражение можно прочитать как А функционально определяет В.
В следующем примере отношения
ПЕРСОНАЛ(Табельный номер, ФИО, Должность, Номер проекта, Дата окончания)
можно определить следующие функциональные зависимости:
Табельный номер ФИО
Табельный номер Должность
Табельный номер Номер проекта
Номер проекта Дата окончания
Действительно, каждому табельному номеру соответствует только одна фамилия, имя, отчество. Каждому проекту соответствует только одна дата окончания.
В общем случае определить функциональную зависимость атрибутов на множестве атрибутов и их значений можно следующим образом. Объединить атрибуты и их значения в одно отношение, отсортировать кортежи отношения по значению определяющего атрибута (атрибутов) и выяснить для каждого атрибута, зависимость которого необходимо найти, наличие повторяющихся значений. Если таковые есть, то атрибут не зависит от определяющего. В противном случае зависимость существует.
Например, пусть имеется множество атрибутов А, В, С и их значения, собранные в отношении R.
А
В
С
M
N
M
L
N
L
А
В
С
M
M
N
N
L
L
Попытаемся установить следующие зависимости А В и А С . Для этого отсортируем отношение по домену А:
Из таблицы видно, что каждому значению атрибута А соответствует только одно значение атрибута В и разные значения атрибута С. Следовательно А функционально определяет В, а С не зависит от А.
В отношении могут существовать функциональные зависимости между любыми атрибутами. Но при построении реляционных моделей представляют интерес только зависимости между ключом и остальными атрибутами отношения и транзитивные зависимости. Под транзитивной зависимостью понимают зависимость одного атрибута от другого через третий атрибут. Так, в рассмотренном выше примере имеет место зависимость:
Табельный номер Номер проекта Дата окончания
Здесь Дата окончания зависит от атрибута Табельный номер через Номер проекта,т.е. имеет место транзитивная зависимость.
Характер функциональных зависимостей в отношении влияет на оптимальность реляционной модели с точки зрения качества базы данных, построенной на этой модели.