2012-04-15 26 views
5

Necesito ayuda y pautas.¿Cómo obtener una clave mínima de las dependencias funcionales?

que tienen la siguiente relación: R = {A, B, C, D, E, F} y el conjunto de dependencias funcionales

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

¿Cuál es la clave primaria de R?

si aplico las reglas de inferencia que consigo estas dependencias de funciones adicionales:

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

D -> AEF 

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

¿Cómo continuar?

+1

Creo que A y D tienen un equivalente de 1-1 en el esquema. – RBarryYoung

+2

Este proceso no determina necesariamente una clave principal (una sola clave). (La "clave principal" está en camino de ser principalmente un concepto SQL, y no un concepto relacional.) Este proceso, aplicado correctamente, le dará un * conjunto * de claves candidatas. Cómo elegir una clave primaria de un conjunto de claves candidatas no es parte del proceso. –

+0

Sí, tienes razón. Este proceso le dará las claves candidatas :)) – mrjasmin

Respuesta

5

Hay un algoritmo bien conocido para hacer esto. No lo recuerdo, pero el ejercicio parece ser lo suficientemente simple como para no usarlo.

Creo que esto tiene que ver con la transitividad:

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

Usted sabe D determina E y E determina F. Por lo tanto, D F determina por transitividad. Como F no determina nada, podemos quitarlo y como E se puede obtener a partir de D podemos quitarlo así:

CurrentKey = {A, B, C, D} 

como se determina AB C y C no determina nada Sabemos que puede' t ser parte de la clave, por lo que eliminarla:

CurrentKey = {A, B, D} 

Finalmente sabemos determina D para que podamos retirarlo de la tecla:

CurrentKey = {A, B} 

Si una vez que tenga esto posible clave, puedes recrear todas las dependencias funcionales es es una clave posible.

PD: Si le sucede que tiene el algoritmo útil, por favor, puesto que como yo estaría encantado de volver a aprender que :)

+0

Muchas gracias :) No he oído hablar de ningún algoritmo. Conozco algunas reglas de inferencia que se pueden usar para derivar nuevas dependencias funcionales :)) – mrjasmin

+0

@ user1285737 No hay necesidad de agradecer , eso es lo que acepta respuestas está ahí :) De todos modos, HAY un algoritmo que le dará el resultado correcto, independientemente de la complejidad de las relaciones y dependencias funcionales. Desearía poder recordarlo: '( –

+0

jeje) También quiero aprender el algoritmo: ((I – mrjasmin

-1

Algoritmo: cálculo de claves (llamada 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 
Cuestiones relacionadas