Что происходит, когда функциональная зависимость является круговой?

Я пытаюсь разложить следующие отношения в 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 остается неизменным.

Как видите, круговые зависимости не являются проблематичными.

Другие вопросы по тегам