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

-101 -

3.5.3.Редуцированные покрытия

Рассмотренные нами неизбыточные покрытия не имеют среди входящих в них зависимостей «лишних», и при попытке удаления любой зависимости будет получено множество, не эквивалентное исходному.

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

3.5.3.1. Посторонние атрибуты

Пусть F — множество F-зависимостей над схемой R, а зависимость X Y F. Атрибут A является посторонним в X Y, если он может быть удален из ее левой или правой части без изменения замыкания F.

Это условие можно записать следующим образом для постороннего атрибута в левой части зависимости XY :

(F - {XY}) {ZY} F при XY R, X=AZ, XZ. Аналогичная запись для постороннего атрибута в правой части: (F - {XY}) {XW} F при XY R, Y=AW, YW.

Пример. Имеется множество G = {ABC, BC, ABD}. Посторонние атрибуты в правой (C в первой зависимости) и левой (B в третьей зависимости) частях подчеркнуты. Действительно, множество

GG = {AB, BC, AD}, поскольку:

G|= G

A BC |= A B (проективность)

{A B, AB D} |= A D (псевдотранзитивность) G |= G

{A B, B C} |= A C (F5), {A B, A C} |= A BC (F3) A D |= AB D (F2)

3.5.3.2. Редуцированные зависимости и множества F- зависимостей

Процесс удаления посторонних атрибутов называется редуцированием. Отсюда вытекает ряд определений.

Пусть F — множество F-зависимостей над схемой R и XY F.

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

- 102 -

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

Зависимость X Y называется редуцированной, если она редуцирована слева и справа и Y .

Определения для зависимостей распространяются на множества F-зависимостей:

Множество F-зависимостей называется редуцированным (слева, справа), если каждая F-зависимость X Y F редуцирована (слева, справа).

Пример. Множество G = {ABC, BC, ABD} не редуцировано слева и справа. Множество G = {ABC, BC, AD} редуцировано слева, но не редуцировано справа. Множество G = = {AB, BC, ABD} редуцировано справа, но не редуцировано слева. Множество G = {AB, BC, AD} редуцировано справа, слева, не имеет пустых правых частей и, следовательно, редуцировано.

3.5.3.3. Алгоритм построения редуцированного покрытия

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

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

Другой особенностью редуцирования множеств F-зависимостей является возможность появления в результате зависимостей типа Y, даже если начинать с неизбыточного покрытия. Таким образом, необходимо последовательно выполнить три этапа: получение редуцированного слева покрытия, получение редуцированного справа покрытия и удаление из множества всех зависимостей вида Y .

Если множество G — редуцированное слева покрытие множества G, то каждое удаление постороннего атрибута A из левой части зависимости AXY приводит к появлению вместо нее зависимости XY и требуется проверить справедливость утверждения F {AXY}F {XY}, где F=G-{AXY}. Поскольку по аксиоме пополнения всегда справедливо XY AXY, то в результате будет получено более сильное множество G и, следовательно, проверять

- 103 -

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

Если проверяемое множество неизбыточно, то проверку атрибута A на то, что он является посторонним, можно упростить и свести к проверке выводимости G XA, поскольку ее выводим: {XA, AXY} XY (F6).

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

LEFTRED(G) begin

F := G;

for каждая F-зависимость X Y G do for каждый атрибут A X do

if MEMBER(F, X A) then

F := (F - {X Y}) (X-A) Y;

return F end.

Теперь перейдем к удалению посторонних атрибутов из правых частей функциональных зависимостей. Заметим, что если G=F {XAY} и G =F {XY}, то всегда справедливо утверждение G G , поскольку XAY XY по F4. Для проверки эквивалентности G G достаточно проверить G G, что, в свою очередь, сводится к проверке G XAY или в упрощенном виде к G XA, поскольку F-зависимость XY G , а {XY, XA} XAY. На этом и базируется алгоритм редукции справа.

RIGHTRED(G) begin

F := G;

for каждая F-зависимость X Y G do for каждый атрибут A Y do

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

return(F)

end.

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

REDUCE(G) begin

F := G;

F := RIGHTRED(LEFTRED(G));

- 104 -

удалить все F-зависимости вида X; return(F)

end.

Пример. Имеется G = {AC, ABDE, ABCDI, ACJ}. LEFTRED(G) = G = {AC, ABDE, ABCDI, AJ}, поскольку наличие AC позволяет удалить C из ACJ. RIGHTRED(G ) = G = = {AC, ABE, ABCDI, AJ}. Удален атрибут D из ABDE (ABCDI ABD по F4) и атрибут C из ABCDI (AC ABC

по F2).

3.5.3.4. Канонические покрытия

Данный вид покрытий дается на уровне определений и примеров.

Множество F-зависимостей G называется каноническим, если оно редуцировано, неизбыточно и каждая F-зависимость в нем имеет вид X A.

Пример. Требуется получить каноническое покрытие для множества G = {A BCE, AB DE, BI J}. Редуцированное слева покрытие G = {A BCE, A DE, BI J}, поскольку для атрибута B в AB DE выводится зависимость A B. Редуцировать множество справа необязательно, поскольку в правых частях канонического покрытия содержатся только одиночные атрибуты и при соблюдении условия неизбыточности исходного множества возможны только два варианта: отсутствие посторонних атрибутов справа и расщепление двух различных зависимостей на пересекающиеся множества, когда одинаковые зависимости поглощаются (из зависимостей A BCE и A DE генерируются две зависимости A E). После расщепления получаем множество G = {A B, A C, A E, A D, BI J}.

3.5.3.5. Структура неизбыточных покрытий

Как уже упоминалось, множество F-зависимостей может иметь несколько неизбыточных покрытий. Рассмотрим сходство между структурами этих покрытий.

Два атрибута X и Y эквивалентны относительно множества F- зависимостей F X Y, если F X Y и F Y X.

Пусть F и G эквивалентные неизбыточные множества F- зависимостей над схемой R, тогда для каждой зависимости X Y F существует зависимость V W G с X V.

- 105 -

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

Пример. Во множествах F={A BC, B A, AD E} и G={A ABC, B A, BD E} нет избыточных зависимостей и F G. Анализ левых частей показывает, что A A, B B и AD BD. Если первые два утверждения не вызывают сомнений, то третье легко выводится.

Вывод AD BD

1.AD AD (рефлексивность)

2.AD D (проективность из 1)

3.A BC (дано)

4.A B (проективность из 3)

5.AD B (пополнение из 4)

6.AD BD (аддитивность из 2 и 5) Вывод BD AB

1.BD BD (рефлексивность)

2.BD D (проективность из 1)

3.B A (дано)

4.BD A (пополнение из 3)

5.BD AD (аддитивность из 2 и 4)

Кроме того, отметим, что в обоих множествах левые части двух первых F-зависимостей эквивалентны (A B), следовательно, зависимости можно классифицировать по наличию у них эквивалентных левых частей. Для этого используется понятие класса эквивалентности.

Пусть F - множество F-зависимостей на схеме R и X R. Тогда множество зависимостей вида Y Z при условии, что X Y, будут образовывать один класс эквивалентности EF(X).

Объединение всех классов эквивалентности можно представить в виде множества EF = { | X R и EF(X) }.

Множество EF(X) может оказаться пустым, если в рассматриваемом множестве F-зависимостей отсутствуют зависимости с левой частью, эквивалентной X. Множество EF всегда является разбиением множества F. При двух заданных эквивалентных неизбыточных множествах F-зависимостей F и G множество F={A B, B A, AD E} и G={A ABC, B A, BD E} только тогда, когда EG(X) , а множество EF содержит столько же классов эквивалентности, сколько и множество EF

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