Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теоретические основы реляционных баз данных. Учебное пособие.pdf
Скачиваний:
0
Добавлен:
15.08.2026
Размер:
936 Кб
Скачать

-91 -

3.4.6.Направленные ациклические графы вывода

RAP-последовательность вывода имеет свое графическое представление в виде помеченных направленных ациклических графов. Напомним, что ориентированный ациклический граф (DAграф) - это ориентированный граф, не имеющий циклов ни в одной вершине, а помеченный граф к тому же имеет для каждой вершины метку из множества L. Дадим определение для графа вывода.

Если имеется множество функциональных зависимостей F над схемой R, тогда DA-графом вывода над F будет ориентированный ациклический граф, помеченный метками из R и построенный по следующим правилам:

R1. Любое множество изолированных вершин из множества R является DA-графом над F.

R2. Если имеется DA-граф вывода H над F, содержащий вершины с метками A1, A2, ...,Ak, и функциональная зависимость A1 A2 ...Ak CZ, то можно построить новый граф H путем добавления к исходному графу H новой вершины, помеченной как C и соединенной дугами с вершинами A1, A2, ...,Ak.

R3. Никакой другой граф не является DA-графом вывода над F.

По аналогии с RAP-последовательностью вывода DA-граф вывода над F, который мы будем называть DDA-графом над F, строится путем однократного применения первого правила и некоторого количества применений второго правила.

Среди вершин графа следует выделить множество начальных вершин, к которым относятся те, которые не имеют входящих в них дуг. Все начальные вершины добавляются в DDA-граф только с помощью правила R1.

Формально граф H является DDA-графом вывода для зависимости XY, если

X - множество меток начальных вершин;

каждый атрибут из Y является меткой какой-либо из вершин

графа.

Аналогично другим выводам DDA-граф обладает используемым множеством, которое определяется следующим образом:

- 92 -

Используемым множеством DDA-графа для функциональной зависимости X Y над множеством функциональных зависимостей F является множество U(H), включающее все зависимости из F, использованные при построении графа H, с использованием правила R2.

Рассмотрим применение DDA-графа на примере. Имеется множество зависимостей F = {ABE, AGJ, BEI, EG, GIH}. Надо построить DDA-граф для функциональной зависимости ABGH.

Построение графа всегда начинается с использования правила R1. В результате получается граф, состоящий исключительно из начальных вершин. В качестве начальных вершин выбираются помеченные метками из левой части функциональной зависимости ABGH:

.

На следующем этапе используется только правило R2 для всех зависимостей, у которых левые части уже полностью включены в граф. Таким образом, мы добавляем вершину с меткой E, используя зависимость ABE, и вершину, помеченную как G, используя EG.

- 93 -

Как видно из последнего рисунка, все атрибуты левой части выводимой зависимости имеют соответствующие им вершины в полученном графе. Используемым множеством DDA-графа будет множество U(H) = {ABE, BEI, EG, GIH}.

3.4.7. Проверка принадлежности к замыканию множества функциональных зависимостей

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

Рассмотрим понятие замыкания атрибута X над F, которое представляет собой множество всех атрибутов C R, для которых справедливо F X C, и обозначается как X+.

Отметим еще раз, что если замыкание F - множество функциональных зависимостей, то замыкание X - множество атрибутов.

После нахождения замыкания X можно утверждать, что выведена зависимость X Z из F и к Z не может быть добавлено ни одного атрибута без нарушения замыкания F. Таким образом, если правая часть зависимости XY является подмножеством Z, то эта зависимость выводится из F. Задача нахождения замыкания множества атрибутов является основой многих алгоритмов синтеза и

- 94 -

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

Будем считать, что на входе рассматриваемой функции CLOSURE - множество атрибутов X и функциональных зависимостей F над схемой R. Дополнительно введем два множества зависимостей OLD и NEW.

CLOSURE(X,F) begin

OLD := ; NEW := X; while NEW OLD do begin

OLD := NEW;

for каждая зависимость {W Z} F do if W NEW then

NEW := NEW Z

end return(NEW) end.

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

Проиллюстрируем работу алгоритма на примере рассмотренного ранее множества зависимостей F = {ABE, AGJ, BEI, EG, GIH}. Надо найти замыкание для множества атрибутов AB.

Цикл

Шаг

NEW

Исходные

OLD

NEW =

 

 

 

зависимости

 

= OLD

 

 

 

 

 

 

0

 

AB

 

 

 

 

 

 

 

 

 

1

 

 

 

 

Нет

 

 

 

 

 

 

 

1

ABE

AB E

AB

 

 

 

 

 

 

 

 

2

ABEI

BE I

AB

 

 

 

 

 

 

 

 

3

ABEIG

E G

AB

 

 

 

 

 

 

 

 

4

ABEIGH

GI H

AB

 

 

 

 

 

 

 

2

 

 

 

 

Нет

 

 

 

 

 

 

 

1

ABEIGHJ

AG J

ABEIGH

 

 

 

 

 

 

 

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]