2012-04-15 10 views
5

Ho bisogno di aiuto e linee guida.Come ottenere una chiave minima dalle dipendenze funzionali?

Ho la seguente relazione: R = {A, B, C, D, E, F} e l'insieme di dipendenze funzionali

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

Qual è la chiave primaria per R?

se applico regole di inferenza ottengo queste ulteriori dipendenze di funzione:

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

D -> AEF 

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

Come faccio a continuare?

+1

Penso che A e D siano equivalenti a 1-1 nello schema. – RBarryYoung

+2

Questo processo non determina necessariamente una chiave primaria (una singola chiave). ("La chiave primaria" è sulla buona strada per essere principalmente un concetto SQL, e non un concetto relazionale.) Questo processo, applicato correttamente, ti fornirà un * set * di chiavi candidate. Come scegliere una chiave primaria da un set di chiavi candidate non fa parte del processo. –

+0

Sì, hai ragione. Questo processo ti darà le chiavi del candidato :)) – mrjasmin

risposta

5

C'è un algoritmo ben noto per fare questo. Non me lo ricordo, ma l'esercizio sembra essere abbastanza semplice da non usarlo.

Penso che questo è tutto transitività:

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

Sai D determina E ed E determina F. Quindi, D determina F per transitività. Poiché F non determina nulla, possiamo rimuoverlo e come E può essere ottenuto da D possiamo rimuoverlo così:

CurrentKey = {A, B, C, D} 

come AB determina C e C non determina nulla sappiamo che può' t essere parte della chiave, in modo da rimuoverlo:

CurrentKey = {A, B, D} 

Infine sappiamo determina D in modo da poter rimuovere quest'ultimo dalla chiave:

CurrentKey = {A, B} 

Se una volta che hai questa chiave è possibile, puoi ricreare tutte le dipendenze funzionali è una chiave possibile.

PS: Se vi capita di avere l'algoritmo a portata di mano, si prega di inviare come sarei felice di ri-imparare che :)

+0

Grazie mille :) Non ho sentito alcun algoritmo, conosco solo alcune regole di inferenza che possono essere utilizzate per derivare nuove dipendenze funzionali :)) – mrjasmin

+0

@ user1285737 Non c'è bisogno di ringraziare , questo è ciò che è accettabile per le risposte :) Comunque, c'è un algoritmo che ti porterà il risultato giusto indipendentemente dalla complessità delle relazioni e delle dipendenze funzionali. Vorrei poterlo ricordare: '( –

+0

hehe voglio anche imparare l'algoritmo: ((I – mrjasmin

-1

Algoritmo: calcolo chiave (chiamata con x = ∅)

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 
Problemi correlati