Что происходит, когда функциональная зависимость является круговой?
Я пытаюсь разложить следующие отношения в 3NF:
A -> BCD
BC -> DE
C -> D
D -> A
Поэтому я устранил избыточность, чтобы получить каноническое покрытие:
A -> BC
B -> E
C -> D
D -> A
И теперь я пытаюсь разложить это на 3NF.
Должен ли я разложить на r1(A, B, C) r2(B, D), r3(C, D)
, Тогда что мне делать D -> A
?
Дело в том, что A -> B -> D -> A
сбрасывает меня
1 ответ
Дано
A -> BCD
BC -> DE
C -> D
D -> A
чтобы получить каноническое покрытие, мы сначала удаляем D из BC->DE:
A -> BC
BC -> E
C -> D
D -> A
Далее мы наблюдаем, что C->D, D->A, A->BC и, если мы знаем B->E, то мы также знаем C->E. Следовательно,
A -> BC
B -> E
C -> D
D -> A
3NF разложение работает следующим образом:
1) Создать таблицы для каждой зависимости в каноническом покрытии
R1(A,B,C) R2(B,E) R3(C,D) R4(A,D)
2) Определите ключи-кандидаты R. Если в таблицах шага 1 нет ключей-кандидатов, добавьте новую таблицу, содержащую только атрибуты ключа-кандидата.
Здесь A - это ключ-кандидат, и он содержится в R1 (и R4), поэтому новые таблицы добавлять нельзя.
3) Если существует таблица, в которой ее атрибуты являются подмножеством атрибутов другой таблицы, удалите "содержащуюся" таблицу.
Это не применимо, поэтому разложение 3NF остается неизменным.
Как видите, круговые зависимости не являются проблематичными.