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

ОГЛАВЛЕНИЕ

 

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

Наберемся еще немного терпения перед тем, как приступить к основной теме статьи - нормализации. Нам предстоит ознакомиться с весьма важным понятием функциональной зависимости (ФЗ).

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

Существует несколько разновидностей зависимостей, которые рассматриваются реляционной теорией: F-зависимости, MV-зависимости и J-зависимости. В настоящий момент наибольший интерес среди них для нас представляют функциональные зависимости, или F-зависимости.

Перед тем, как дать формальное определение функциональной зависимости, приведу пример (заимствованный из книги: Д.Мейер. Теория реляционных баз данных. - М: Мир, 1987). В этом примере используется отношение График(ПИЛОТ РЕЙС ДАТА ВРЕМЯ-ВЫЛЕТА):

Табл.1
ПИЛОТРЕЙСДАТА ВРЕМЯ-ВЫЛЕТА
Кушинг8309 авг10:15
Кушинг11610 авг13:25
Кларк28108 авг05:50
Кларк30112 авг18:35
Кларк8311 авг10:15
Чин8313 авг10:15
Чин11612 авг13:25
Коупли28109 авг05:50
Коупли28113 авг05:50
Коупли41215 авг13:25

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

Предположим, что не каждое сочетание данных является допустимым. На совокупность данных накладывается ряд ограничений:
  • Каждый рейс имеет определенное время вылета.
  • Данный пилот в данные день и время может участвовать только в одном рейсе.
  • Для данного рейса и даты назначается только один пилот.

Рассмотрев исходные данные с учетом этих ограничений, мы можем сделать ряд выводов:
  • ВРЕМЯ-ВЫЛЕТА функционально зависит от РЕЙСА.
  • РЕЙС функционально зависит от {ПИЛОТ, ДАТА, ВРЕМЯ-ВЫЛЕТА}.
  • ПИЛОТ функционально зависит от {РЕЙС, ДАТА}.


Итак, если значения кортежа на некотором множестве атрибутов единственным образом определяют значения на другом множестве атрибутов, говорят, что имеет место функциональная зависимость или, короче, F-зависимость.

Если на интуитивном уровне понятно, что представляет собой F-зависимость, попробуем дать ее более строгое определение на основе реляционной алгебры.

Пусть r - отношение со схемой R, X и Y - подмножества R. Отношение r удовлетворяет функциональной зависимости X->Y, если (r WHERE (X=x))[Y] имеет не более одного кортежа для каждого X-значения x. Другими словами, возьмем любые два кортежа t1 и t2. Если X->Y и t1(X)=t2(X), то t1(Y)=t2(Y).

Не правда ли, данное определение весьма сходно с определением ключа из предыдущей главы? Это сходство не случайно. Фактически X является ключом отношения r[XY] (попробуйте убедиться в этом самостоятельно).

Теперь мы, пожалуй, достаточно подкованы теоретически, чтобы приступить к рассмотрению нашей основной темы - нормализации отношений.