Décomposition d'une relation en BCNF

j'ai de la difficulté à établir quand une relation est dans la forme normale de Boyce-Codd et comment la décomposer info BCNF si elle ne l'est pas. Étant donné cet exemple:

R (A, C, B, D, E) avec des dépendances fonctionnelles: A - > B, C - > D

Comment puis-je le décomposer?

Les étapes que j'ai prises sont les suivantes:

A+ = AB  
C+ = CD  
R1 = A+ = **AB**  
R2 = ACDE (since elements of C+ still exist, continue decomposing)  
R3 = C+ = **CD**  

R4 = ACE (pas de FD fermetures de résider dans ce rapport)

alors maintenant je sais que ACE va composer toute la relation, mais la réponse pour la décomposition est: AB, CD, ACE.

je suppose que je suis aux prises avec la façon de décomposer correctement une relation dans la forme BCNF et comment dire quand vous avez fini. Apprécierait vraiment quelqu'un qui peut me guider à travers leur processus de pensée lors de la résolution de ces problèmes. Merci!

20
demandé sur Abhishek Agrawal 2013-02-27 05:13:35

2 réponses

bien que la question soit ancienne, les autres questions/réponses ne semblent pas fournir une réponse générale très claire, étape par étape, sur la détermination et la décomposition des relations avec la BCNF.

1. Déterminer FNBC:

Pour que la relation R soit dans BCNF, toutes les dépendances fonctionnelles (FDS) qui tiennent dans R doivent satisfaire à la propriété que les déterminants X sont tous des superkeys de R. C. i.e. si X->Y tient dans R, alors X doit être une superkey de R pour être dans BCNF.

Dans votre cas, il peut être montré que la seule clé candidate (minimum superkey) est ACE. Ainsi les deux FDs: a->B et C - > D violent le BCNF car A et C ne sont pas des superkeys ou R.

2. Décomposer R en forme de BCNF:

Si R n'est pas dans le BCNF, nous décomposons R en un ensemble de relations S qui sont dans le BCNF.

Ceci peut être accompli avec un algorithme très simple:

Initialize S = {R}
While S has a relation R' that is not in BCNF do:   
   Pick a FD: X->Y that holds in R' and violates BCNF
   Add the relation XY to S
   Update R' = R'-Y
Return S

Dans votre cas, les étapes itératives sont comme suit:

S = {ABCDE}       // Intialization S = {R}
S = {ACDE, AB}    // Pick FD: A->B which violates BCNF
S = {ACE, AB, CD} // Pick FD: C->D which violates BCNF
// Return S as all relations are in BCNF

Notez aussi que dans ce cas, la dépendance fonctionnelle est préservée mais la normalisation à la BCNF ne le garantit pas.

j'espère que cette aide.

87
répondu xlm 2014-07-10 21:43:38

1FN -> 2FN -> 3FN -> FNBC

selon le jeu de FD donné " ACE " forme la clé. Il est clair que R (A,B,C,D,E) n'est pas dans 2NF. La décomposition du 2NF donne R1(A,B) , R2(C,D) et R3 (a,C,E). cette décomposition a décomposé les relations dans 3NF et aussi dans BCNF.

1
répondu User 2016-04-30 21:06:45