Общий алгоритм создания минимального покрытия состоит из трех этапов:
Разделение правой части с получением FD только с одним атрибутом в правой части.
Для каждой левой части с более чем одним атрибутом попробуйте удалить каждый атрибут по очереди и посмотреть, могут ли остальные определить правую часть. В этом случае удалите атрибут из левой части.
Для каждой оставшейся зависимости попытайтесь выяснить, можно ли ее устранить.
В вашем случае первый шаг выдает:
F = { A C → G
A C D → B
B C → D
C G → B
C G → D
C E → A
C E → G
D → E
D → G }
На втором шаге мы должны проверить первые семь зависимостей. Для каждой зависимости A1A2...An -> B
мы пытаемся по очереди исключить каждую Ai
и посмотреть, включено ли B
в замыкание оставшихся атрибутов (замыкание, принятое по отношению к F). В этом случае у нас есть две возможности: из ACD -> B
мы можем исключить либо A
, либо D
. Итак, теперь у нас есть два различных набора зависимостей:
F1 = { A C → G
C D → B
B C → D
C G → B
C G → D
C E → A
C E → G
D → E
D → G }
и
F2 = { A C → G
A C → B
B C → D
C G → B
C G → D
C E → A
C E → G
D → E
D → G }
Теперь мы можем применить последний шаг: для каждой зависимости X -> A
мы можем видеть, если A
включено в закрытие X
, X+
относительно всех других зависимостей. В этом случае мы можем устранить эту зависимость.
В общем случае результат будет зависеть от порядка, в котором мы применяем эти проверки.
Здесь есть четыре различных канонических обложки:
G1 = { A C → G
B C → D
C G → B
C E → A
D → E
D → G }
G2 = { A C → G
B C → D
C G → D
C E → A
C D → B
D → E
D → G }
G3 = { A C → B
B C → D
C G → B
C E → A
D → E
D → G }
G4 = { A C → B
B C → D
C G → D
C E → A
D → E
D → G }
Примечание: мне не ясно, есть ли другие канонические обложки.