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

Основные понятия

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

Имеем некоторую схему отношения – R(A1A2…An). Функциональная зависимость представляет собой один из возможных типов зависимостей между атрибутами отношения. Она определяет, что:

- значение одного подмножества атрибутов Y Í R зависит от значения другого подмножества X Í R. Например, в приведенном выше отношении ПОСТАВКА_ТОВАРОВ атрибут CITY зависит от атрибута S#;

- одному и тому же значению X соответствует одно и то же значение Y.

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

- есть конкретная реализация отношения r1(R), и для нее на основании анализа конкретных значений атрибутов можно определить функциональные зависимости;

- на основе анализа предметной области можно определить функциональные зависимости для всех возможных реализаций отношения r1(R), r2(R), … в разные моменты времени.

Конечно, для проектирования БД необходимо использовать второй способ.

Пусть R(A1A2…An) – схема отношения с атрибутами из некоторого универсального множества атрибутов U = {A1, A2, …, An}. Пусть также X Í U и Y Í U – некоторые подмножества множества атрибутов схемы R. Тогда говорят, что Y функционально зависит от X (или X функционально определяет Y) тогда и только тогда, когда для любой допустимой реализации отношения r(R) каждое значение множества атрибутов X связано в точности с одним значением множества атрибутов Y.

Формальная запись: f : X à Y

Здесь X – детерминант, а Y – зависимость.

Другими словами, для любой допустимой реализации отношения r(R) если какие-то два кортежа имеют одинаковые значения атрибутов из X, они обязательно имеют и одинаковые значения атрибутов из Y: pY (sX=x (r)) – всегда дает только один кортеж для любого значения x атрибутов X из r.

Примеры:

1. Очевидный пример: так как первичный ключ PK однозначно определяет каждый кортеж отношения, PK à A1A2…An, а также и любое подмножество атрибутов из U.

2. Из рассматриваемого примера ПОСТАВКА ТОВАРА очевидно, что

S# à SNAME

P# à PNAME

(S#,P#) à QTY

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

Рассмотрим пример. Пусть дана некоторая реализация отношения, удовлетворяющая следующей схеме R:

R (S# P# QTY)
  S1 P1
  S1 P2
  S2 P1
  S2 P3
  S3 P1

Из приведенной реализации можно сделать вывод, что S# à QTY. Но в какой-то следующий момент времени в реализации отношения может появиться кортеж <S1, P3, 200>, который нарушает предполагаемую функциональную зависимость.