Проверка выполнения свойства соединения без потерь информации
R1 | +(1) | +(1) | +(1) | +(1) | +(1) | +(1) | ||||||||||||||||
R2 | +(11) | +(11) | +(11) | +(11) | +(11) | +(9) | +(12) | +(12) | +(14) | +(12) | +(13) | +(12) | +(9) | +(1) | +(1) | |||||||
R3 | +(2) | +(2) | +(2) | +(2) | +(2) | +(1) | +(3) | +(3) | +(5) | +(3) | +(4) | +(3) | +(1) | +(1) | +(10) | |||||||
R4 | +(1) | +(1) | +(1) | +(5) | +(1) | +(4) | +(1) | |||||||||||||||
R5 | +(1) | +(3) | +(3) | +(5) | +(3) | +(1) | +(3) | |||||||||||||||
R6 | +(1) | +(1) | ||||||||||||||||||||
R7 | +(1) | +(1) | +(1) | +(1) | ||||||||||||||||||
R8 | +(1) | +(3) | +(3) | +(5) | +(3) | +(4) | +(1) | +(8) | +(6) | +(6) | +(6) | +(3) | +(1) | +(1) | ||||||||
R9 | +(7) | +(12) | +(12) | +(14) | +(12) | +(13) | +(7) | +(1) | +(15) | +(15) | +(15) | +(12) | +(7) | +(1) |
Шаг 1: Строится таблица, из 9 строк и 22 столбцов. На пересечении i-ой строки и j-го столбца ставится «+(k)», где k – номер шага, если атрибут с соответствующим номером принадлежит заданному отношению. Ключевые атрибуты отношений выделены «фоном».
Шаг 2: Просматриваем список функциональных зависимостей.
Рассмотрим зависимость 18→1, а также и все остальные с определяющим атрибутом 18 (18→2, 3, 4, 5). В строке, соответствующей R3, также присутствует атрибут 18. Поэтому мы доставляем в этой строке «2» в те колонки, которые соответствуют атрибутам из определяемой части зависимостей.
Шаг 3: Рассматриваем зависимости 6→7, 8, 10, 17
Шаг 4: Рассматриваем зависимости 6→11
Шаг 5: Рассматриваем зависимости 17→9
Шаг 6: Рассматриваем зависимости 19→14, 15, 16
Шаг 7: Рассматриваем зависимости 20→6, 12, 19
Шаг 8: Рассматриваем зависимости 20→13
Шаг 9: Рассматриваем зависимости 21→6,18
Шаг 10: Рассматриваем зависимости 21→22
Шаг 11: Рассматриваем зависимости 18→1, 2, 3, 4, 5
Шаг 12: Рассматриваем зависимости 6→7, 8, 10, 17
Шаг 13: Рассматриваем зависимости 6→11
Шаг 14: Рассматриваем зависимости 17→9
Шаг 15: Рассматриваем зависимости 19→14, 15, 16
Шаг 16: Рассматриваем зависимости 20→6, 12, 19
Шаг 17: Рассматриваем зависимости 20→13
Шаг 18: Рассматриваем зависимости 21→6,18
Шаг 19: Рассматриваем зависимости 21→22
Уже на 16-м шаге не происходит каких-либо изменений. В тоже время строка, состоящая из ‘+’, не была получена, а это значит, что свойство соединения без потерь информации не выполнено.
Составим обобщенный ключ: «Идентификатор фильма», «Идентификатор распределения», «Идентификатор носителя», «Идентификатор типа носителя», «Идентификатор клиента», «Идентификатор выдачи» (18, 21, 6, 19, 20). Из обобщенного ключа удалим те атрибуты, которые функционально выводятся из остающихся, и получим следующее отношение: «Идентификатор распределения» и «Идентификатор выдачи».
В этом отношении отметим неформальный признак многозначной зависимости: добавление одной записи может потребовать добавления еще нескольких записей (выдача клиенту носителя, на который записано несколько фильмов, влечет за собой добавление в полученное отношение нескольких записей, соответствующих данной выдаче и распределениям записанных на выдаваемый носитель фильмов).
Чтобы решить проблему многозначной зависимости, вернем в обобщенный ключ атрибут «Идентификатор носителя». Тогда в явном виде имеется многозначная зависимость: «Идентификатор носителя» →→ «Идентификатор выдачи» («Идентификатор распределения»).
Чтобы избавиться от многозначной зависимости, по правилу декомпозиции, обобщенный ключ разбивается на отношения: («Идентификатор носителя», «Идентификатор выдачи») и («Идентификатор носителя», «Идентификатор распределения»), естественное соединение, которых будет давать обобщенный ключ. Оба этих отношения уже присутствуют в схеме базы данных в виде отношений «Выдачи» и «Распределение фильмов»; то есть, добавления новых отношений не требуется.
Полученная схема удовлетворяет свойству соединения без потерь информации, при условии, что R3 ∞ R8 образует обобщенный ключ.
R1 | +(1) | +(1) | +(1) | +(1) | +(1) | +(1) | ||||||||||||||||
R2 | +(11) | +(11) | +(11) | +(11) | +(11) | +(9) | +(12) | +(12) | +(14) | +(12) | +(13) | +(12) | +(9) | +(1) | +(1) | |||||||
R3 | +(2) | +(2) | +(2) | +(2) | +(2) | +(1) | +(3) | +(3) | +(5) | +(3) | +(4) | +(3) | +(1) | +(1) | +(10) | |||||||
R4 | +(1) | +(1) | +(1) | +(5) | +(1) | +(4) | +(1) | |||||||||||||||
R5 | +(1) | +(3) | +(3) | +(5) | +(3) | +(1) | +(3) | |||||||||||||||
R6 | +(1) | +(1) | ||||||||||||||||||||
R7 | +(1) | +(1) | +(1) | +(1) | ||||||||||||||||||
R8 | +(1) | +(3) | +(3) | +(5) | +(3) | +(4) | +(1) | +(8) | +(6) | +(6) | +(6) | +(3) | +(1) | +(1) | ||||||||
R9 | +(7) | +(12) | +(12) | +(14) | +(12) | +(13) | +(7) | +(1) | +(15) | +(15) | +(15) | +(12) | +(7) | +(1) | ||||||||
R3 ∞ R8 | +(2) | +(2) | +(2) | +(2) | +(2) | +(1) | +(3) | +(3) | +(5) | +(3) | +(4) | +(1) | +(8) | +(6) | +(6) | +(6) | +(3) | +(1) | +(1) | +(1) | +(1) | +(10) |
Как видно из таблицы, уже на 10-м шаге была получена строка, состоящая из “+”. Таким образом, после добавления обобщенного ключа, наша схема обладает свойством соединения без потерь информации.