Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Модели данных и СУБД.doc
Скачиваний:
7
Добавлен:
01.03.2025
Размер:
1.71 Mб
Скачать

4.2.4. Покрытие множеств зависимостей.

Пусть F1 и F2 – множества функциональных зависимостей на множестве атрибутов U. Говорят, что F1 и F2 эквивалентны, если F1+=F2+. В этом случае говорят также, что F1 покрывает F2 (и F2 покрывает F1). Легко проверить, являются ли F1 и F2 эквивалентными. Для этого не обязательно строить замыкания F1+ и F2+. Достаточно для каждой зависимости (X—>Y)F1 проверить, содержится ли эта зависимость в F2+. Для этого проверяется, содержится ли Y в X+F2, (индекс внизу означает, что замыкание строится относительно набора функций F2); в свою очередь для каждой зависимости (V—>W)F2 проверяется, содержится ли она в F1+. Если эти условия выполняются, то F1 и F2 эквивалентны, в противном случае – неэквивалентны.

Заметим, что когда от заданных зависимостей переходим к полным, то получаем набор функций, эквивалентный исходному.

Кроме того, всегда можно перейти к набору функций, эквивалентному исходному и такому, что в правой части находится только один атрибут.

Говорят, что множество зависимостей F является минимальным покрытием или элементарным функциональным базисом структуры функциональных зависимостей, если:

  1. правая часть каждой зависимости из F содержит единственный атрибут;

  2. ни для какой зависимости Х>Y в F множество F\(X>Y) не эквивалентно F;

  3. все зависимости набора F полные.

В литературе, при определении функционального базиса иногда не требуют выполнения условий 1) и 3), а функциональный базис, удовлетворяющий 3), называют элементарным.

Заметим, что одному набору функций F может соответствовать несколько элементарных функциональных базисов.

Пример.

Для схемы R=({А1, А2, А3, A4},

F={A1,A2>A3; АЗ—>А4; А1—>А4; АЗ,А4>А1; А1,А4>А2; А2—>А1; A3>А1; А4>А1}) функциональными базисами являются, например, следующие множества функций:

F1 = {А1—>А2; А2>A3; АЗ>А4; А4—>А1},

F2 = {Al> A2; А1—>АЗ; А1—>А4; А2—>А1; АЗ>А1; А4>А1}.

Легко видеть, что F1+=F2+=F+и при этом F1 и F2 удовлетворяют приведенным выше трем условиям.

4.2.5. Декомпозиция схем отношений.

Декомпозицией схемы отношения R=(U, F) называется замена ее совокупностью ={R1, R2, ..., Rk), где Ri=(Ui), i=l, 2, ..., k, такой, что UlU2…Uk=U. При этом не требуется, чтобы Ui были непересекающимися. Ri будем называть подсхемами отношения R.

Соединение без потерь.

Пусть задана схема отношения R=(U, F) и ее декомпозиция =(R1, R2, …, Rk). Говорят, что эта декомпозиция обладает свойством соединения без потерь относительно F, если каждое отношение R для R, удовлетворяющее F, может быть представлено в виде:

R=R1(R) ><R2(R) ><… Rk(R),

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

Рассмотрим основные свойства отображения проекция-соединение.

Если =(R1, R2, ..., Rk), обозначим через M отображение, которое определяется соотношением M(R)=R1(R) ><R2(R) ><…Rk(R). Таким образом, условие соединения без потерь относительно F может быть выражено следующим образом: для всех R, удовлетворяющих F, R=M(R).

Для любой декомпозиции выполняются следующие условия:

а) R  M(R);

б) если S=M(R), то Ri(S)=Ri;

в) M(M(R))=M(R).

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

Для проверки свойства соединения без потерь можно использовать следующий алгоритм.

Пусть заданы схема отношения R = ({А1, А2, ..., An}, F) и декомпозиция =(R1, R2, ..., Rk), Ri=(Ui), i=1, 2, ..., k.

Строим таблицу с n столбцами и k строками, столбец j соответствует атрибуту Aj, а строка i – схеме отношения Ri. На пересечении строки i и столбца j поместим символ Aj, если AjUi. B противном случае поместим туда символ *.

Просматриваем каждую из зависимостей Х>Y. Рассматривая зависимость Х—>У, изменяем строки, которые совпадают по всем столбцам, соответствующим атрибутам из X. При обнаружении двух таких строк отождествляем их символы в столбцах, соответствующих атрибутам из Y. Если при этом один из символов в одной из строк равен Aj, а символ другой строки в этом же столбце равен *, то заменяем * на Aj. Повторяем просмотр зависимостей до тех пор пока: либо некоторая строка станет равной А1, А2, ..., Аn; либо больше изменений в таблице провести нельзя. В первом случае декомпозиция  обладает свойством соединения без потерь. Во втором – нет.

Примеры.

Пусть для схемы R=({А1, А2, А3, А4, А5}, {А1>А2; А2>A3; АЗ,А4>А5; А2>А4}) получена декомпозиция  = (Rl, R2, R3), где

R1=({А1, А2}), R2=({А2, АЗ, А4}), R3=({АЗ, А4, А5}).

Требуется проверить, обладает ли она свойством соединения без потерь. Построим следующие таблицы:

1-я (начальная таблица):

A1

A2

*

*

*

*

A2

A3

A4

*

*

*

A3

A4

A5

2-я таблица:

A1

A2

A3

A4

*

*

A2

A3

A4

A5

*

*

A3

A4

A5

3-я таблица:

A1

A2

A3

A4

A5

*

A2

A3

A4

A5

*

*

A3

A4

A5

В последней таблице первая строка представляет собой все Aj, следовательно, декомпозиция обладает свойством соединения без потерь.

Теперь пусть для схемы

R=({А1, А2, А3, А4, А5}, {A1>A2; A2>A3; A3,A5>A4}), получена декомпозиция  = (Rl, R2), где R1 = ({A1, A2}); R2 = ({A2, A3, A4, A5}). Построим следующие таблицы:

1-я таблица:

A1

A2

*

*

*

*

A2

A3

A4

A5

2-я таблица:

A1

A2

A3

*

*

*

A2

A3

A4

A5

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

Справедливо следующее утверждение.

Если =(R1(U1), R2(U2)) – декомпозиция R=(U, F), то  обладает свойством соединения без потерь относительно F тогда и только тогда, когда ((U1U2)>U1\U2)F+ или ((UlU2)—>U2\Ul)F+.

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