Главная » SQL, Базы данных » Функциональные зависимости  ОСНОВНЫЕ ОПРЕДЕЛЕНИЯ

0

Для демонстрации основных идей данного раздела используется несколько измененная версия переменной отношения с данными о поставках, которая в  дополнение к обычным атрибутам s#, Р# и QTY будет содержать также атрибут CITY, представляющий

1Следует отметить, что это довольно формальное утверждение является истинным именно потому, что на рассматриваемые данные распространяются некоторые "практические  ограничения" (см. главу 9). В  данном  случае  таковым  является  правило,  что  в  любой  отдельно  взятый  момент  времени  любой отдельно взятый поставщик не может выполнить больше одной поставки любой отдельно взятой детали. Другими словами, образно говоря, функциональные  зависимости относятся к сфере семантики (они определяют, что означают данные) и поддерживаются сознательно, а не возникают в результате счастливой случайности, благодаря  которой в определенное время в базе данных вдруг появляются некоторые значения, связанные между собой определенной закономерностью.

Рис. 11.1. Пример значения переменной отношения SCP

город соответствующего поставщика. Во избежание путаницы, далее эту  измененную переменную отношения мы будем называть SCP. Она представлена  на  рис. 11.1 в виде таблицы.

В этой области, как и во многих других, важно очень четко различать, во-первых, значение переменной отношения в определенный момент (вариант а), во-вторых, множество всех возможных значений, которые переменная отношения может принимать в различные моменты (вариант б). Сначала дадим определение  концепции функциональной зависимости для варианта а, а затем — для варианта б.

и Функциональная зависимость, вариант а. Пусть r является отношением, а X и Y — произвольными подмножествами множества атрибутов отношения r. Тогда Y функционально зависимо от х, что в символическом виде записывается как

X   →  Y

(читается либо как "X функционально определяет Y", либо как "X стрелка Y") тогда и только тогда, когда каждое значение множества х отношения r связано точно с одним значением множества Y отношения r. Иначе говоря, если два кортежа отношения r совпадают по значению х, они совпадают и по значению Y.

Например, отношение SCP (см. рис. 11.1) удовлетворяет требованиям  приведенной ниже функциональной зависимости, поскольку все кортежи отношения SCP с одинаковыми значениями атрибута S# имеют одно и то же значение атрибута CITY.

{   S#   }  → { CITY  }

На самом деле, это отношение удовлетворяет требованиям сразу нескольких  функциональных зависимостей.

{S#,Р#}→{QTY}

{S#,P#}→{CITY}

{S#,P#}→{CITY,QTY}

{S#,P#}→{S#}

{S#,P#}→{S#,P#,CITY,QTY}

{S#} →{QTY}

{QTY} → {S#}

Упражнение. Проверьте правильность этого утверждения.

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

S#   → CITY

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

S#   →  CITY

выполняется для всех возможных значений переменной отношения SCP,  поскольку в любой момент одному поставщику соответствует в точности один город. По этой причине любые два кортежа переменной отношения SCP в один и тот же момент и с одним и тем же номером поставщика должны соответствовать одному и тому же городу. Практически утверждение, что данная функциональная зависимость выполняется "всегда" (т.е. для всех возможных значений SCP), является ограничением целостности для переменной отношения SCP, поскольку при этом накладываются определенные ограничения на все ее допустимые  значения.  Ниже  приведена  формулировка  этого ограничения,  которая выполнена с использованием основанного на исчислении предикатов синтаксиса языка Tutorial D, который был представлен в главе 9.

CONSTRAINT S#_CITY_FD

FORALL SCPX FORALL SCPY

( IF SCPX.S# = SCPY.S#

THEN SCPX.CITY = SCPY.CITY END IF ) ;

Здесь SCPX и SCPY — переменные области значений, принимающие свои значения в

области определения переменной отношения SCP. Выражение s# → CITY может расцениваться как сокращенный способ представления этой более длинной формулировки.

Упражнение. Приведите алгебраическую версию этого определения.

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

■  Функциональная зависимость, вариант б. Пусть R является переменной  отношения, а х и Y — произвольными подмножествами множества атрибутов переменной! отношения R. Тогда Y функционально зависимо от х, что в символическом виде| записывается как

X   →   Y

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

множества Y отношения R. Иначе говоря, для любого допустимого значения переменной отношения R, если два кортежа переменной отношения R  совпадают по значению X, они также совпадают и по значению Y.

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

Ниже   перечислено   несколько   функциональных   зависимостей,   выполняющихся

(безотносительных ко времени) для переменной отношения SCP.

{S#, Р# } → QTY

{S#, Р# } → CITY

{S#, P# } → { CITY, QTY }

{S#, P# } → S#

{S#, P# } → { S#, P#, CITY, QTY }

{ S# }   → CITY

Обратите внимание, в частности, на функциональные зависимости, которые  выпол няются для отношения, представленного на рис. 11.1, но не "всегда"  выполняются для переменной отношения SCP.

S#     → QTY

QTY → S#

Иначе говоря, такое утверждение, как (например) "количество деталей в каждой поставке данного поставщика одинаково", действительно оказалось  истинным для конкретных значений, присутствующих в отношении на рис. 11.1, но ложным для всех возможных допустимых значений переменной отношения SCP.

Следует отметить, что если х является потенциальным ключом переменной отношения R, то все атрибуты Y переменной отношения R должны обязательно быть функционально зависимыми от X (этот факт упоминается в разделе 9.10 главе 9 и непосредственно следует из определения потенциального ключа). Аналогично, в переменной отношения деталей р необходимо, чтобы всегда выполнялась следующая зависимость.

Р# → { Р#, PNAME, COLOR, WEIGHT, CITY }

Действительно, если переменная отношения R удовлетворяет функциональной  зависимости А → в и А не является потенциальным ключом2, то R обязательно  будет характеризоваться некоторой избыточностью. Например, если обратиться к переменной отношения SCP, то наличие в ней функциональной зависимости S# → CITY приведет к тому, что сведения о месте расположения поставщика в определенном городе повторятся много раз (это хорошо видно на рис. 11.1). Подробнее данный вопрос обсуждается в следующей главе.

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

2   При тех условиях, что эта функциональная зависимость не является тривиальной (раздел  10.3),

причем А не является суперключом (раздел 10.5), a R содержит по крайней мере два кортежа (!).

(Упражнение. Попробуйте записать полное множество функциональных  зависимостей, удовлетворяемых переменной отношения SCP.) Большая часть оставшегося в этой главе материала  посвящена  поискам методов  сокращения  обширного  множества  функциональных зависимостей до некоторых допустимых размеров.

Почему эта цель столь важна? Как уже отмечалось, одна из причин состоит в том, что функциональные  зависимости  являются  ограничениями  целостности,  поэтому  желательно, чтобы СУБД обеспечивала их соблюдение. Следовательно, для каждого заданного множества функциональных зависимостей s желательно найти такое множество т,

которое (в идеальной ситуации) было бы существенно меньше множества S и при этом каждая функциональная зависимость в множестве S могла бы быть заменена функциональной зависимостью из множества т. Если бы такое множество т  было найдено, то СУБД достаточно было бы контролировать выполнение функциональных зависимостей из множества т, что автоматически обеспечивало бы соблюдение всех функциональных зависимостей из множества s. Именно поэтому задача поиска подходящего множества т представляет большой практический интерес.

Источник: Дейт К. Дж., Введение в системы баз данных, 8-е издание.: Пер. с англ. — М.: Издательский дом «Вильямс», 2005. — 1328 с.: ил. — Парал. тит. англ.

По теме:

  • Комментарии