Скачиваний:
102
Добавлен:
02.05.2014
Размер:
2.3 Mб
Скачать

10.5. Замыкание множества атрибутов

В принципе, замыкание S+ для заданного множества функциональных зависимостей S можно вычислить с помощью следующего алгоритма: "Применять правила из предыдущего раздела до тех пор, пока создание новых функциональных зависимостей не прекратится". На практике редко требуется вычислить замыкание само по себе, а потому и только что упомяну­тый алгоритм вряд ли будет достаточно эффективным. Однако из этого раздела вы узнаете, как можно вычислить некоторое подмножество замыкания, а именно — то подмножество, ко­торое состоит из всех функциональных зависимостей с некоторым (указанным) множеством Z атрибутов, расположенных слева. Точнее говоря, мы покажем, что для заданной переменной-отношения R, заданного множества атрибутов этой переменной-отношения Z и заданного множества функциональных зависимостей S, выполняющихся для переменной-отношения R, можно найти множество всех атрибутов переменной-отношения R, которые функционально зависимы от Z, т.е. так называемое замыкание Z+ множества Z в пределах S2. Простой алго­ритм вычисления этого замыкания показан на рис. 10.2.

Упражнение. Докажите правильность этого алгоритма.

CLOSURE[Z,S] := Z ;

do <бесконечно>;

for each FD X —> Y in S

/* для каждой ФЗ X —» Y в S */

do ;

if X < CLOSURE!Z,S]

/* < = <является подмножеством> */

then CLOSURE[Z,S] :=

CLOSURE[Z,S] U Y ;

end ;

if CLOSURE[Z,S] <не изменилось в этой итерации>

then leave loop ;

/* вычисления завершаются */

end ;

Рис. 10.2. Вычисление замыкания Z множества Ze пределах S

2 Множество функциональных зависимостей с атрибутами Z, расположенными слева, пред­ставляет собой множество из всех функциональных зависимостей вида Z—>Z', где Z' является некоторым подмножеством Z . Тогда замыкание S исходного множества S представляет со­бой объединение всех таких множеств функциональных зависимостей, взятых для всех возмож­ных множеств атрибутов Z

Пример. Предположим, что дана переменная-отношение R с атрибутами А, В, С, D, Е и F и следующими функциональными зависимостями. А -ч> ВС Е —> CF

В —» Е CD -» EF

Вычислим замыкание {А,В}+ множества атрибутов {А,В}, исходя из заданного мно­жества функциональных зависимостей.

  1. Присвоим замыканию CLOSURE[Z,S] начальное значение — множество {А,В}.

  2. Выполним внутренний цикл четыре раза — по одному разу для каждой заданной функциональной зависимости. На первой итерации (для зависимости А —> ВС) бу­дет обнаружено, что левая часть действительно является подмножеством замыка­ния CLOSURE[Z,S]. Таким образом, к результату можно добавить атрибуты В и С. Замыкание CLOSURE[Z,S] теперь представляет собой множество (А,В,С}.

  3. На второй итерации (для зависимости Е —> CF) обнаруживается, что левая часть не является подмножеством полученного до этого момента результата, который, та­ким образом, остается неизменным.

  4. На третьей итерации (для зависимости В —» Е) к замыканию CLOSURE [Z,S] будет добавлено множество Е, которое теперь будет иметь вид {А,В,С,Е}.

  5. На четвертой итерации (для зависимости CD —> EF) замыкание CLOSURE [Z,S] оста­нется неизменным.

  6. Далее внутренний цикл выполняется еще четыре раза. На первой итерации резуль­тат останется прежним, на второй он будет расширен до {A,B,C,E,F}, а на третьей и четвертой — снова не изменится.

  7. Наконец после еще одного четырехкратного прохождения цикла замыкание CLOSURE [Z,S] останется неизменным и весь процесс завершится с результатом {А,В}+ = {A,B,C,E,F}. |

Из сказанного выше можно сделать очень важное заключение: для заданного мно­жества функциональных зависимостей S легко можно указать, будет ли заданная функциональная зависимость X —> Y следовать из S, поскольку это возможно тогда и только тогда, когда множество Y является подмножеством замыкания Х+ множества X для заданного множества S. Иначе говоря, таким образом представлен простой способ определения, будет ли данная функциональная зависимость X —> Y включена в замы­кание S+ множества S.

Еще одно важное заключение основано на следующем факте. Прежде всего, вспом­ним определение понятия суперключ из главы 8. Суперключ переменной-отношения R— это множество атрибутов переменной-отношения R, которое в виде подмножества (но необязательно собственного подмножества) содержит по крайней мере один потен­циальный ключ. Из этого определения прямо следует, что суперключи для данной пере­менной-отношения R— это такие подмножества К множества атрибутов переменной-отношения R, что функциональная зависимость К —> А будет истинна для каждого атри­бута А переменной-отношения R. Другими словами, множество К является суперключом тогда и только тогда, когда замыкание К+ для множества К в пределах заданного множе­ства функциональных зависимостей является множеством абсолютно всех атрибутов пе­ременной-отношения R. (Кроме того, множество К является потенциальным ключом то­гда и только тогда, когда оно является неприводимым суперключом).

Соседние файлы в папке Дейт К. Дж. Введение в системы баз данных [7 издание]