2.2. Семантика функциональных зависимостей

Реляционная модель, как и любая другая модель данных [1] (например, сетевая) учитывает ограничения, накладываемые семантикой предметной области на используемые данные. Одним из способов учета ограничений предметной области и является понятие функциональной зависимости, которое поддается строгой формализации и позволяет упростить процесс проектирования схемы баз данных, удовлетворяющих определенным требованиям.

Известно, что реляционная база данных представляет собой совокупность схем отношений, описывающих некоторую предметную область. Т.е. с точки зрения реляционного подхода, предметная область описывается с помощью одного строительного блока – ОТНОШЕНИЯ, которое призвано покрыть различные понятия инфологической модели [3, 4, 6, 13, 18, 31].

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

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

Пусть, имеется отношение СПИСОК_ПОЛЕТОВ с атрибутами, имена которых Пилот, Номер рейса, Дата, Время вылета (в дальнейшем имена атрибутов будут выделяться курсивом, а имена отношений - прописными буквами), показанное на рис. 4 [13].

 Пилот Номер рейса  Дата Время вылета
 Иванов 641 3 июня  1.10
 Иванов  643  5 июня  0.20
 Петров  641  4 июня  1.10
 Серов  43  1 июня  7.10

Рис. 4. СПИСОК_ПОЛЕТОВ

Представленное отношение описывает реальную ситуацию, когда за пилотом закреплены рейсы, а за каждым рейсом – дата и время вылета.

Анализ этого отношения (как отмечалось, в теории баз данных принято также употреблять термин “состояние отношения”, которое будет обозначаться Ri, причем под ним будет подразумеваться конкретный набор кортежей) со схемой:

СПИСОК_ПОЛЕТОВ = {{Пилот, Номер рейса, Дата, Время вылета}},

или, используя более простую запись, о которой говорилось выше:

СПИСОК_ПОЛЕТОВ(Пилот, Номер рейса, Дата, Время вылета),

показывает, что:
  1. Для каждого рейса определено только одно время вылета;
  2. Для любого пилота, даты, время вылета, определен только один рейс;
  3. Для рейса и даты определен только один пилот.

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

Например, для рассмотренного отношения набор ФЗ будет иметь вид:

  1. Время вылета Номер рейса,
  2. Пилот, Дата, Время вылета Номер рейса,
  3. Номер рейса, Дата Пилот.

Заметим, что выделенные зависимости должны быть устойчивыми во времени, т.е. не зависеть от состояния Ri отношения R. Функциональная зависимость есть свойство реляционной схемы, которое определяется во время ее построения и выполняется для любого состояния отношений.

Понятие ФЗ играет фундаментальную роль в теории реляционных баз данных и требует формального определения.

Определение ФЗ. Пусть R – отношение со схемой R(X, Y, Z), где X, Y и Z – атрибуты R. Отношение R удовлетворяет функциональной зависимости X Y, если мощность отношений (результатов) следующих двух предложений языка SQL

SELECT  X, Y
FROM R;

и
SELECT DISTINCT   X, Y
FROM R;
будет одинакова.

Первое предложение определяет срез на отношении R, а второе предложение является аналогом операции проекции реляционной алгебры.

Результатом первого предложения всегда будут все строки присутствующие в отношении R, а результатом второго предложения будет "чистое" отношение, т.е. повторяющиеся строки в ответе будут отсутствовать.

Другими словами, в каждый момент времени элементу х, принадлежащему D(X), соответствует не более одного элемента у, принадлежащего D(Y), где D(X) и D(Y) - области допустимых значений (домены) атрибута X и Y соответственно.

Другой способ интерпретации ФЗ: Х У сводится к следующему высказыванию: если t1 и t2 кортежи отношения R с одинаковыми значениями x, т.е. t1(х) = t2(х), то обязательно t1(у) = t2(у).

Если не использовать математическую символику, то можно интерпретировать функциональную зависимость следующим образом:
если X и Y атрибуты отношения, то Y функционально зависит от X, если для каждого значения X (в любой момент времени) существует в точности одно связанное с ним значение Y.

X и Y могут быть составными, т.е. они могут представлять собой не единичные атрибуты, а состоять из двух и более атрибутов.

Если Х У и У Х, то существует взаимно однозначная зависимость, которая обозначается Х У.

При обозначении функциональной зависимости ее имя обычно не пишется, так как предполагается, что данные совокупности атрибутов (правильнее, доменов) связаны единственной функциональной зависимостью:

А1, ..., Ак В1, ... , Вm.

Запись А1, ..., Ак В1, ..., Вm обозначает отсутствие функциональной зависимости между атрибутами.

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

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

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

Если Х и Х' суть некоторые подмножества атрибутов отношения R и Х' Х, то Х Х' - тривиальная функциональная зависимость (символ , как обычно, означает нестрогое включение).

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

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


*) Срезом называют совокупность кортежей отношения, получаемую после удаления из него невыбранных столбцов

[ Назад  Начало раздела  Далее  Содержание]