Базы данных

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


Говорят, что атрибут В функционально зависим от атрибута А реляционной таблицы, если значение А однозначно определяет значение В. Любые две строки, имеющие одинаковое значение атрибута А, будут также иметь одинаковые значения атрибута В. Также говорят, что А функционально определяет В. Эта зависимость выражается как

А -> В

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

1. Найти строку таблицы, в которой значение атрибута А равно а.

2. Возвратить значение атрибута В этой строки.

Если состояние таблицы изменится, то функция, определяющая значение В на основании А, также может измениться.

Рассмотрим схему Customer на 5.2. В таблицу Customer входит некое множество почтовых адресов в США. Атрибут state функционально зависит от атрибута zipcode, т.е. все адреса с некоторым значением ZIP-кода находятся в определенном штате. Стрелка, направленная от атрибута zipcode к атрибуту state, иллюстрирует эту функциональную зависимость.

Customer:

(accountld. lastName, firstName, street, city, state, zipcode)

Puc. 5.2. Схема Customer с функциональной зависимостью между атрибутами zipcode и state

Очевидно, что столбец ZIP-кода таблицы не содержит всех возможных пятизначных чисел. Следовательно, определяемая таблицей функция не определена для некоторых чисел из домена атрибута zipcode. Когда добавляется адрес со значением ZIP- кода, еще не содержащимся в таблице, функция претерпевает изменение с тем, чтобы включить соответствующую пару значений “штат—ZIP-код”. Даже если таблица содержит все возможные почтовые адреса страны, при назначении почтовой службой США нового ZIP-кода, функция, определенная таблицей, будет изменяться.

Функциональные зависимости используются также для множеств атрибутов. На 5.3 показан более полный набор функциональных зависимостей для схемы Customer. Индекс zipcode определяет штат state и город city, а комбинация улицы street, города city и штата state определяет индекс zipcode. Эти зависимости записываются следующим образом.

zipcode —> {city, state}

{street, city, state} —» zipcode

Customer:

(accountld. lastName, firstName, street, city, state, zipcode)

Комментарии закрыты