
4.5.Замыкание множества заданных функциональных зависимостей.
При декомпозиции отношения Rс целью его нормализации на два отношенияR1 иR2 может оказаться, что вR1 илиR2 появятся новые функциональные зависимости, которых не было в отношенииR. В этом случае нужно получить из множества функциональных зависимостейF, присущих отношениюRполное множество функциональных зависимостей –F+ , которое называется замыканиемF.
Если F1 – множество функциональных зависимостей, присущих отношениюR1, то декомпозиция будет верной, еслиF1≤F+ и еслиF2≤F+ , гдеF2 – множество функциональных зависимостей, присущих отношениюR2.
Существует несколько методов получения F+ изF. Рассмотрим 2 метода.
Алгоритм SATISFIES.
Пусть задано отношение График(Пилот, Рейс, Дата, Время вылета)
Пилот |
Рейс |
Дата |
Время вылета |
1 1 2 2 2 3 3 4 4 4
|
83 116 281 301 83 83 116 281 281 412 |
9Августа 10 Августа 8 Августа 12 Августа 11 Августа 12 Августа 13 Августа 9 Августа 13 Августа 15 Августа
|
10:15 13:25 5:50 18:35 10:15 10:15 13:25 5:50 5:50 13:25
|
Куминг-1 Кларк-2 Чин-3 Коул-4 |
|
|
|
Для этого отношения иметься следующая семантика:
F={Рейс → Время вылета,
Пилот, Дата, Время вылета → Рейс,
Рейс, Дата → Пилот}
Имея это множествоFмы можем задаться вопросом о том, а существует ли зависимость, например, такого типа: Время вылета → Рейс или другие, более сложные зависимости.
Ответ на этот вопрос можно получить используя следующий алгоритм:
Пусть задано отношение RиF- зависимостьx→y.
1.Пересортируем отношение Rпоx- столбцам так, чтобы собрать кортежи с равнымиx- значениями вместе.
2.Если каждая совокупность кортежей с равными x-значениями имеет так же равныеy-значения, то существует зависимостьx→y. В противном случае нет.
Этот алгоритм можно применить к множеству Fфункциональных зависимостей, заданных семантикой отношения, а также к предполагаемым зависимостям.
Проверим зависимость: Рейс → Время вылета.
XY
Пилот |
Рейс |
Дата |
Время вылета |
1 2 3 |
|
9Августа 11 Августа 13 Августа |
= |
1 3 |
|
10 Августа 12 Августа |
= |
2 4 4 |
|
8 Августа 9 Августа 13 Августа |
= |
2 |
301 |
12 Августа |
18:35 |
4 |
412 |
15 Августа |
13:25 |
Вторая часть алгоритма выполняется, значит x→y.
Проверим зависимость: Время вылета → Рейс.
Пилот |
Рейс |
Дата |
Время вылета |
2 4 4 |
281 281 281 |
8Августа 9 Августа 13 Августа |
5:50 5:50 5:50 |
1 2 3 |
83 83 83 |
9 Августа 11 Августа 13 Августа |
10:15 10:15 10:15 |
1 3 4 |
|
10 Августа 12 Августа 15 Августа |
13:25 13:25 13:25 |
2 |
301 |
12 Августа |
18:35 |
Для времени 13:25 второе условие алгоритма не выполняется, следовательно зависимость Время вылета → Рейс не существует.
С помощью приведенного алгоритма можно получить полное множество функциональных зависимостей F+, соответствующих заданному отношению и его семантике, т.е.F≤F+
Пример получения F+ изF.
Дано: R(A,B,C) иF= {AB→C,C→B}
Множество F+будет состоять из следующих элементов:
F+=
{A→AB→BC→C
AB→AAB→BAC→C
AC→ABC→BBC→C
ABC→AABC→BABC→C
AB→ABAC→ACBC→BCABC→ABC
ABC→ABABC→ACABC→BC
1ABC→C2C→BAC→B
AB→ACC→BCAC→AB}
AB→BC
AB→ABC
3.36. Множество X+.
Множество F+даже для небольшого числа зависимостей вFможет быть очень большим и его вычисление трудоемко. Однако принадлежность функциональной зависимости в множествеF+нам необходимо всегда проверять, так как правильность отношенияRпроверяется по двум условиям:
R1
R
на условие естественного соединенияR1 иR2,
R2 восстанавливающегоR.
На условие принадлежности полученных функциональных зависимостей к множеству F+.
Задача принадлежности функциональной зависимости к F+была решена с помощью простого алгоритма. Вместо вычисленияF+можно вычислить другое множество, которое будет называтьсяX+и функциональная зависимостьx→yпринадлежитF+, еслиy≤x+.
Алгоритм получения X+.
Рассмотрим на примере:
Дано: U={A,B,C,D,E,G} и R(A,B,C,D,E,G).
Пусть Fсостоит из следующих восьми зависимостей:
F={AB→CD→EG
C→ABE→C
BC→DCG→BD
ABCD→BCE→AG}
Проверим, принадлежит ли BD→EкF+.
Положим X(0)=BD.
1.Вычислим значение X(1). Для его вычисления найдем зависимости, которые имеют в левой частиB,DилиBD. Такой зависимостью является:D→EG.
Присоединим к X(0) EG(правую часть зависимости), тогдаX(1)=BDEG.
2.Ищем зависимости, которые в левой части имеют B,D,E,Gили их комбинации.
D→EG,BE→C. ТогдаX(2)=BCDEG
3.Выписываем зависимости, имеющие в левых частях B,C,D,E,G.
C→A,BC→D,CG→,BD,CE→AG.X(3)=ABCDEG– мы получили множество всех атрибутов отношенияR. Значит следующие шаги не принесут никаких новых результатов. Итеративный процесс на этом заканчивается.
X+=ABCDEG(BD)+=ABCDEG
Проверим теперь: Принадлежит ли зависимость BD→EзависимостиF+.
Т.к. Е ≥X+, то зависимостьBD→EпринадлежитF+замыканию множества функциональных зависимостейF.