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

 

 

- 95 -

 

 

 

3

 

Да

 

 

 

1

ABEIGHJ

ABEIGH

Действительно, данный алгоритм строит DDA-граф для зависимости XX+. На основе данного алгоритма можно построить простой алгоритм для проверки принадлежности зависимости XY к замыканию множества функциональных зависимостей F.

MEMBER(F,XY) begin

if Y CLOSURE(X, F)

then return(ИСТИНА)

end.

Если рассматривать алгоритм MEMBER с точки зрения производительности, то очевидно, что его временная сложность такая же, как и у алгоритма CLOSURE, который является его основой.

Основные работы по повышению производительности систем автоматизации проектирования схем реляционных баз данных связаны

смодификацией именно алгоритма CLOSURE.

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

Впредыдущих разделах были рассмотрены функциональные зависимости и способы их выделения на основе анализа исходных данных. Однако один и тот же набор данных может быть описан с помощью различных наборов функциональных зависимостей. Например, каждая зависимость из множества F = {ABBC, AC, AB, BC, ACB} может быть выведена из множества G = {AB, BC}. Таким образом, можно рассматривать второе множество как более компактное представление первого множества. Следует рассмотреть, по какой причине более выгодно пользоваться короткой записью множества зависимостей.

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

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

3.5.1. Покрытия и эквивалентность

Ранее рассматривалось понятие замыкания множества функциональных зависимостей F+, которое можно получить, многократно применяя аксиомы вывода до тех пор, пока новые

- 96 -

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

Два множества функциональных зависимостей F и G над схемой R эквивалентны (F G), если F+ = G+.

Если два множества зависимостей F и G эквивалентны, то F есть покрытие G, а G - покрытие F.

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

С другой стороны, если мы имеем F G, то F+ = G+, откуда следует, что наличие любой зависимости XY в F требует его выводимости из G. С одной зависимости такой вывод можно распространить на все множество и сделать заключение о том, что F G. Симметричность определения эквивалентности приводит к тому, что справедливо и следующее утверждение: G F.

Поскольку F+ включает каждую зависимость XY, выводимую из F, то из F G следует, что G F+, а после применения операции замыкания и к левой и к правой частям неравенства получаем G+ (F+) +, зная, что (F+)+ = F+, получаем G+ F+. Проведя аналогичные рассуждения для G+ получим G+ F+. Из этого следует лемма, которую можно сформулировать следующим образом:

Лемма. Для двух множеств функциональных зависимостей F и G над схемой R тождество F G имеет место тогда, и только тогда, когда F G и G F.

Рассмотрим пример. Даны множество F={ABC, AD, CDE} и множество G={ABCE, AABD, CDE}. Последние зависимости из множеств равны, следовательно, необходимо проверить только выводимость первых зависимостей обоих множеств.

Первоначально будем рассматривать выводимость зависимостей F из G: зависимость ABCE ABC (проективность), а AABD ABC (тоже проективность). Таким образом, доказано, что все зависимости из F выводятся из множества G.

Выведем ABCE:

1)ABC (дано);

2)AD (дано);

3){ABC, AD} ABCD (аддитивность из 1 и 2);

-97 -

4)ABCD ACD (проективность из 3);

5)CDE (дано);

6){ACD, CDE} AE (транзитивность из 4 и 5);

7){ABC, AE} ABCE (аддитивность из 1 и 6). Теперь осталось вывести зависимость AABD:

1)AA (рефлексивность);

2)ABC (дано);

3)ABC AB (проективность из 2);

4)AAB (аддитивность из 1 и 3);

5)AD (дано);

6)AABD (аддитивность из 3 и 5).

Рассмотренная лемма лежит в основе алгоритма проверки

выводимости одного множества функциональных (G) зависимостей из другого (F). Алгоритм возвращает логическое значение «истина», если множество F действительно выводится из F, и «ложь» в противном случае.

DERIVES(F,G) begin

v := «истина»

for каждая зависимость XY G do v := v and MEMBER(F,XY);

return (v) end.

Рассмотренный алгоритм применяется в другом алгоритме, который позволяет определить уже эквивалентность множеств F и G. На входе алгоритма также множества функциональных зависимостей, для которых по очереди проверяется выводимость друг из друга, а возвращается логическое значение «истина» в том случае, когда выполняется условие F G.

EQUIV(F,G) begin

v := DERIVES(F,G) and DERIVES(F,G); return (v)

end.

3.5.2. Неизбыточные покрытия

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

- 98 -

словами, одну или несколько F-зависимостей можно из него удалить, не изменяя его основного свойства — замыкания.

Множество F-зависимостей F неизбыточно, если оно не имеет такого собственного подмножества F' F, что F' F. В противном случае множество F избыточно.

Пример. F = {ACB, AC, AB, BC} является избыточным множеством, поскольку из него можно удалить F-зависимость ACB и получить эквивалентное множество F' = {AC, AB, BC}. Несмотря на то, что F' F, само множество F' избыточно, поскольку у него самого имеется собственное подмножество F''' = {AB, BC}, такое, что F' F'' и F'' F'''.

Обратим внимание на то, что F ∩ F' = {ACB}. Множества различаются только F-зависимостью, удаляемой в процессе нахождения неизбыточного покрытия. Для проверки эквивалентности множеств F F' достаточно проверять только выводимость зависимостей множества F ∩ F' из множества F'. В примере на первом этапе зависимость ACB выводится из данной зависимости AB с использованием аксиомы пополнения F2. На втором этапе зависимость AC выводится из AB и BC с использованием аксиомы F5 (транзитивность).

На основе анализа приведенных рассуждений можно сформулировать еще одно определение избыточности множества F- зависимостей:

Множество F-зависимостей F избыточно, если имеется F- зависимость X Y F такая, что F - {X Y} F, а зависимость X Y называется избыточной в множестве F.

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

REDUNDANT(F) begin

v := «ложь»

for каждая F-зависимость XY F do

if MEMBER(F - {XY}) then v := «истина»; return(v)

end.

Если мы будем рассматривать любое произвольное множество F- зависимостей, то увидим, что оно обладает свойством конечности, то

- 99 -

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

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

Предположим, что имеется множество F-зависимостей F = на

схеме R = XYA1A2A3...Ai-1AiAi+1...An. Из него могут быть получены F- зависимости вида A1A2A3...Ai-1AiAi+1...An A1A2A3...Ai-1AiAi+1...An. К таким зависимостям можно применять только аксиомы пополнения и

проективности (F2 и F4). В первом случае будет добавляться атрибут в левую часть F-зависимости, а во втором - удаляться из правой ее части. В обоих случаях правая часть — подмножество левой части F- зависимости.

Рассмотрим, что дает применение других аксиом. Аксиома F3 аддитивности позволяет получать из зависимостей XY и XZ зависимость XYZ, однако нам известно, что Z X и Y X, следовательно, Z Y X. Опять получена F-зависимость, у которой правая часть - подмножество левой части.

Применение аксиомы F5 транзитивности можно представить, исходя из наших ограничений, следующим образом: {XYZYZ, YZZ} XYZZ, откуда следует, что Z XYZ и полученная зависимость опять имеет правую часть, как подмножество левой.

Аксиома псевдотранзитивности также приводит к аналогичному результату: {XYY, WYZZ} XYZWZ. Таким образом, доказана теорема:

Теорема. Если дано множество функциональных зависимостей F= над схемой R и атрибуты X R и Y R, то в замыкание этого множества могут входить только зависимости вида XY Y.

Данная теорема позволяет сделать вывод о том, что F- зависимости в произвольном множестве F можно условно разбить на

- 100 -

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

Следствие. Если дано множество функциональных зависимостей F над схемой R и атрибуты X R и Y R, то любая зависимость вида XY Y будет являться избыточной и может быть удалена без изменения замыкания F.

Пример. Дано множество F-зависимостей F = {AB B, A C, A B, B C}. Зависимость AB B избыточна в соответствии со следствием из теоремы, а AC выводится из AB и BC (транзитивность).

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

NONREDUN(G) begin

F := G;

for каждая F-зависимость X Y F do

if (X Y) or MEMBER(F - {X Y}) then F := F - {X Y};

return (F)

end.

Первое условие в операторе if проверяется быстро без вычисления замыкания X, как это требуется для проверки второго условия.

Пример. Дано множество F-зависимостей G={A B, B A, B C, A C}. Результатом работы алгоритма будет множество G ={A B, B A, A C}. Однако при изменении порядка записи зависимостей в множестве G ({A B, B A, A C, B C }) результат работы алгоритма изменится ({A B, B A, B C }) и, следовательно, можно сделать вывод о том, что множество F-зависимостей может иметь несколько неизбыточных покрытий. Кроме того, если G — неизбыточное покрытие F, то вовсе необязательно, чтобы в G входили только зависимости из F (G F). Так, множество G={A B, B A, AB C} эквивалентно F и неизбыточно, следовательно, оно является неизбыточным покрытием F, хотя зависимость {AB C} F.

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