Для этого существует хорошо известный алгоритм. Я не помню этого, но упражнение кажется достаточно простым, чтобы не использовать его.
Я думаю, что это все о транзитивности:
CurrentKey = {A, B, C, D, E, F}
Вы знаете, D определяет Е и Е определяет F. Следовательно, D определяет F по транзитивности. Как F ничего не решает, мы можем удалить его и в качестве Е может быть получен из D, мы можем удалить его, а также:
CurrentKey = {A, B, C, D}
Как AB определяет C и C ничего не определить, мы знаем, что это может» т быть частью ключа, поэтому мы удаляем его:
CurrentKey = {A, B, D}
Наконец, мы знаем, А определяет D таким образом, мы можем удалить последний из ключа:
CurrentKey = {A, B}
Если только вы это возможный ключ, вы можете воссоздать все функциональные зависимости это возможный ключ.
PS: Если вам посчастливилось иметь алгоритм под рукой, пожалуйста, напишите это, как я был бы рад вновь узнать, что :)
Я думаю, что A и D эквивалентны по схеме 1-1. – RBarryYoung
Этот процесс не обязательно определяет первичный ключ (один ключ). («Первичный ключ» на пути к тому, чтобы быть главным образом концепцией SQL, а не реляционной концепцией.) Этот процесс, правильно примененный, даст вам * набор * ключей-кандидатов. Как выбрать первичный ключ из набора ключей-кандидатов не является частью процесса. –
Да, вы правы. Этот процесс даст вам ключи-кандидаты :)) – mrjasmin