Как получить минимальный ключ из функциональных зависимостей?

Мне нужна помощь и рекомендации.

У меня есть следующее отношение:R = {A, B, C, D, E, F} и набор функциональных зависимостей

F = {
  {AB -> C};
  {A  -> D};
  {D  -> AE};
  {E  -> F};
}

Какой первичный ключ для R?

Если я применяю правила вывода, я получаю следующие дополнительные зависимости от функций:

<code>D -> A
D -> E
D -> F

D -> AEF

A -> E
A -> F
A -> DEF
</code>

Как мне продолжить?

 mrjasmin15 апр. 2012 г., 22:41
Да ты прав. Этот процесс даст вам ключи кандидата :))
 RBarryYoung15 апр. 2012 г., 20:22
Я думаю, что A и D эквивалентны 1-1 в схеме.
 Mike Sherrill 'Cat Recall'15 апр. 2012 г., 22:09
Этот процесс не обязательно определяет первичный ключ (единственный ключ). («Первичный ключ» находится на пути к тому, чтобы быть в основном концепцией SQL, а не реляционной концепцией.) Этот процесс, правильно примененный, даст вамset кандидатов ключей. Как выбрать первичный ключ из набора ключей-кандидатов не является частью процесса.

Ответы на вопрос(2)

procedure key(x;A;F)
foreach  ! B 2 F do
if   x and B 2 x and B ̸2  then
return; /* x not minimal */
fi
od
if x+ = A then
print x; /* found a minimal key x */
else
X   any element of A  x+;
key(x [ fXg;A;F);
foreach  ! X 2 F do
key(x [ ;A;F);
od
fi

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

Я думаю, что это все о транзитивности:

CurrentKey = {A, B, C, D, E, F}

Вы знаете, D определяет E, а E определяет F. Следовательно, D определяет F транзитивностью. Так как F ничего не определяет, мы можем удалить это, и как E можно получить из D, мы можем удалить это:

CurrentKey = {A, B, C, D}

Поскольку AB определяет C, а C не определяет ничего, что, как мы знаем, не может быть частью ключа, мы удаляем его:

CurrentKey = {A, B, D}

Наконец, мы знаем, что A определяет D, поэтому мы можем удалить последний из ключа:

CurrentKey = {A, B}

Если у вас есть этот возможный ключ, вы можете воссоздать все функциональные зависимости, это возможный ключ.

PS: Если вам пригодится алгоритм, пожалуйста, опубликуйте его, как я буду рад узнать его заново :)

 mrjasmin15 апр. 2012 г., 22:37
Большое вам спасибо :) Я не слышал ни о каком алгоритме, я просто знаю некоторые правила вывода, которые можно использовать для получения новых функциональных зависимостей :))
 15 апр. 2012 г., 22:39
@ user1285737 Не надо благодарить, вот для чего и принимаются ответы :) В любом случае, существует ЕГО алгоритм, который даст вам правильный результат, независимо от сложности отношений и функциональных зависимостей. Хотелось бы, чтобы я это запомнил:
 16 апр. 2012 г., 00:30
Да, это. Можно иметь более одного ключа-кандидата, но первичным ключом будет только один.
 mrjasmin16 апр. 2012 г., 00:27
Разве t {B, D} также не является ключом-кандидатом и поэтому может быть выбран в качестве первичного ключа? Спасибо
 mrjasmin15 апр. 2012 г., 22:41
хе-хе я тоже хочу выучить алгоритм ((я

Ваш ответ на вопрос