web-dev-qa-db-fra.com

Décomposition d'une relation en BCNF

J'ai du mal à établir quand une relation est en forme normale Boyce-Codd et comment la décomposer info BCNF si ce n'est pas le cas. Étant donné cet exemple:

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

Comment dois-je procéder pour la décomposer?

Les mesures 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 = AS (aucune fermeture FD ne réside dans cette relation)

Alors maintenant, je sais que ACE composera toute la relation, mais la réponse à la décomposition est: AB, CD, ACE.

Je suppose que j'ai du mal à décomposer correctement une relation en BCNF et à savoir quand vous avez terminé. J'apprécierais vraiment tous ceux qui peuvent me guider à travers leur processus de réflexion lors de la résolution de ces problèmes. Merci!

21
raphnguyen

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 BCNF.

1. Déterminez BCNF:
. doit être une super-clé de R pour être dans BCNF.

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

2. Décomposer R en BCNF:
Si R n'est pas dans BCNF, nous décomposons R en un ensemble de relations S qui sont dans BCNF.
Cela 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 les suivantes:

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

Ainsi R (A, B, C, D, E) est décomposé en un ensemble de relations: R1 (A, C, E), R2 (A, B) et R3 (C, D) qui satisfait BCNF.

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

J'espère que ça aide.

95
xlm

1NF -> 2NF -> 3NF -> BCNF

Selon FD donné, "ACE" forme la clé. Clairement, R (A, B, C, D, E) n'est pas dans 2NF. La décomposition 2NF donne R1 (A, B), R2 (C, D) et R3 (A, C, E). cette décomposition des relations décomposées sont en 3NF et aussi en BCNF.

0
User