20

Ich habe Probleme festzustellen, wenn eine Beziehung in Boyce-Codd Normalform ist und wie es BCNF Informationen zerlegen, wenn es nicht ist. Vor diesem Beispiel:Zerlegung einer Beziehung in BCNF

R (A, C, B, D, E) mit funktionalen Abhängigkeiten: A -> B, C -> D

Wie gehe ich davon zersetzen?

Die Schritte, die ich getroffen habe, sind:

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

R4 = ACE (keine FD Schließungen in dieser Beziehung befinden)

ich So, jetzt wissen, dass ACE die ganze Beziehung komponieren, aber Die Antwort für die Zerlegung lautet: AB, CD, ACE.

Ich denke, ich habe Probleme damit, eine Beziehung in BCNF-Form zu zerlegen und zu sagen, wann Sie fertig sind. Würde wirklich jemanden schätzen, der mich bei der Lösung dieser Probleme durch ihren Denkprozess begleiten kann. Vielen Dank!

+0

Haben Sie all diese Fragen zu BCNF in der Seitenleiste gelesen? –

+0

Ich lese ein Beispiel durch, das bei der Dekomposition hilft. Ich denke, ich verstehe diesen Teil gut, aber ich bin immer noch ein bisschen verwirrt, wenn du komplett fertig bist. Ist es, wenn Ihre Beziehungen nicht mehr alle Attribute innerhalb der Schließung einer Ihrer funktionalen Abhängigkeiten enthalten? – raphnguyen

+0

Eine Beziehung ist in BCNF, wenn jeder "Pfeil" in jeder funktionalen Abhängigkeit ein "Pfeil" außerhalb eines Kandidatenschlüssels ist. –

Antwort

83

Obwohl die Frage alt ist, scheinen die anderen Fragen/Antworten keine sehr klare Schritt-für-Schritt-allgemeine Antwort auf das Bestimmen und Zerlegen von Beziehungen zu BCNF zu geben.

1. Bestimmen BCNF:
Für Relation R in BCNF sein, sind alle funktionalen Abhängigkeiten (FDS), die in R halten müssen Eigenschaft erfüllen, daß die Determinanten X sind alle superkeys von R. dh wenn X- > Y gilt in R, dann muss X ein Superkey von R sein, um in BCNF zu sein.

In Ihrem Fall kann gezeigt werden, dass der einzige mögliche Schlüssel (minimaler Superkey) ACE ist. somit sowohl FDs: A-> B und C> D verletzen BCNF als sowohl A als auch C nicht superkeys oder R.

2. Decompose R in BCNF Form:
Wenn R nicht in BCNF ist , zerlegen wir R in eine Menge von Beziehungen S, die in BCNF sind.

ist die Iterationsschritte
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 

In Ihrem Fall wie folgt::
Dies kann mit einem sehr einfachen Algorithmus erreicht wird

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 

Somit R (A, B, C, D, E) ist, zerlegt in eine Reihe von Beziehungen: R1 (A, C, E), R2 (A, B) und R3 (C, D), die BCNF erfüllt.

Beachten Sie auch, dass in diesem Fall die funktionale Abhängigkeit erhalten bleibt, aber die Normalisierung auf BCNF garantiert dies nicht.

Ich hoffe, das hilft.

+3

Ihre Erklärung und Schritt für Schritt Iteration war perfekt. Danke –

+0

Denken Sie daran, dass Sie die funktionalen Abhängigkeiten entlang des 'R's speichern müssen, da Sie in jeder Iteration ein Tupel' (R ', Σ') 'analysieren müssen. Also sollte 'S' allgemein wie folgt aussehen:' S = [(R_1, Σ_1); (R_2, Σ_2); ...; (R_n, Σ_n)}. Ich empfehle auch, das 'R'auf diese Weise zu aktualisieren' R '= X (R' - Y) '. – Pengxer

1

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

auf gegebene FD Nach gesetzt "ACE" bildet den Schlüssel. Offensichtlich ist R (A, B, C, D, E) nicht in 2NF. 2NF-Zersetzung ergibt R1 (A, B), R2 (C, D) und R3 (A, C, E). diese Zersetzung zerlegt Beziehungen sind in 3NF und auch in BCNF.

Verwandte Themen