2012-04-15 3 views
5

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

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

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

Что является первичным ключом для R?

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

D -> A 
D -> E 
D -> F 

D -> AEF 

A -> E 
A -> F 
A -> DEF 

Как продолжать?

+1

Я думаю, что A и D эквивалентны по схеме 1-1. – RBarryYoung

+2

Этот процесс не обязательно определяет первичный ключ (один ключ). («Первичный ключ» на пути к тому, чтобы быть главным образом концепцией SQL, а не реляционной концепцией.) Этот процесс, правильно примененный, даст вам * набор * ключей-кандидатов. Как выбрать первичный ключ из набора ключей-кандидатов не является частью процесса. –

+0

Да, вы правы. Этот процесс даст вам ключи-кандидаты :)) – mrjasmin

ответ

5

Для этого существует хорошо известный алгоритм. Я не помню этого, но упражнение кажется достаточно простым, чтобы не использовать его.

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

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: Если вам посчастливилось иметь алгоритм под рукой, пожалуйста, напишите это, как я был бы рад вновь узнать, что :)

+0

Большое вам спасибо :) Я не слышал ни одного алгоритма, я просто знаю некоторые правила вывода, которые можно использовать для получения новых функциональных зависимостей :)) – mrjasmin

+0

@ user1285737 Не нужно благодарить , это то, что есть ответы на ответы :) Во всяком случае, есть алгоритм, который даст вам правильный результат независимо от сложности отношений и функциональных зависимостей. Я хочу, чтобы я мог запомнить это: '( –

+0

Хе-хе, я также хочу изучить алгоритм: ((I – mrjasmin

-1

Алгоритм: Ключ вычисление (вызов с х = ∅)

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 
Смежные вопросы