Возьмите FD, например AB → C
Увеличивайте, пока не будут упомянуты все атрибуты, например, ABDEFG → CDEFG (обратите внимание, что это эквивалентно ABDEFG → ABCDEFG, потому что тривиально верно, что A-> A и B-> B).
Это говорит о том, что ABDEFG - суперключ.
Проверьте другие FD, в которых LHS является подмножеством вашего суперключа, и что в его RHS содержится какой-то другой атрибут вашего суперключа.
Есть два. EF → G и FG → E. Удалите атрибуты RHS этих из вашего суперключа. Это дает вам два ключа, которые, безусловно, являются суперключами, но не обязательно неприводимыми: ABDEF и ABDFG.
Однако из AB → C и CD → E можно также вывести, что ABD → E. Следовательно, мы также можем удалить E из нашего ключа ABDEF. Здесь неприятно то, что когда я сказал «Проверьте другие FD», это, очевидно, означает, что вы также должны проверить любой FD, который появляется при закрытии вашего набора FD (т.е. любой FD, который выводится из вашего данного набора FD) ... И это немного непрактично делать вручную ...
Полезный сайт для проверки правильности ваших результатов:
http://www.koffeinhaltig.com/fds/ueberdeckung.php
Теперь вы сможете определить, что опция c является ключом.
UPDATE
ссылка теперь битая, понятия не имею, куда ушел сайт. Может быть, вы все еще можете найти что-то полезное на сайтах, которые отслеживают историю Интернета.