2016-05-02 13 views
0

Ich habe diese Datenbank:Der richtige Weg Datenbank in 3NF zu normalisieren

R(A, B, C, D, E) 
Keys: A 
F = {A -> B, D -> E, C -> D} 

ich normalisieren es in 3NF wie folgt aus:

R(A, B, C, D, E) 
Keys: AD 
F = {AD -> B, AD -> E, C -> D} 

Was ich tue, ist, wenn ich D überprüfen -> E, D ist kein Superkey und E ist kein Schlüsselattribut, daher behandle ich D und A als Superkey {AD}. Wenn ich C -> D überprüfe, ist C kein Schlüssel, aber D ist ein Schlüsselattribut, also ist es in Ordnung.

Ist meine Normalisierung korrekt?

Antwort

1

In Ihren Eingabedaten ist ein Problem aufgetreten. Wenn die Relation R die Abhängigkeiten F = {A -> B, D -> E, C -> D} hat, dann kann Akein Schlüssel sein. In der Tat ist ein Schlüssel eine Reihe von Attributen, deren Schließung bestimmt alle Attribute der Beziehung, was hier nicht der Fall ist, da:

A+ = AB 

Von F, die (nur) möglich Schlüssel ist AC in der Tat

AC+ = ABCD 

Normalisieren bedeuten die Redundanz durch Zersetzen eine Beziehung in anderen Beziehungen, in denen die funktionalen Abhängigkeiten nicht verletzen die normale Form, und so zu reduzieren, dass die Beziehungen zerlegt Verbindung kann man das Original erhalten.

In Ihrer Lösung zerlegen Sie die Beziehung nicht, sondern ändern nur den Satz von Abhängigkeiten mit anderen Abhängigkeiten, die nicht von der ersten Menge impliziert sind.

Eine korrekte Zersetzung würde stattdessen die folgende sein:

R1 < (A B) , 
{ A → B } > 

R2 < (C D) , 
{ C → D } > 

R3 < (D E) , 
{ D → E } > 

R4 < (A C) , 
{ } > 

Der Algorithmus eine Beziehung in 3NF zersetzen kann auf jedes gutes Buch auf Datenbanken zu finden.