it-swarm.com.de

Wie behebt die Normalisierung die drei Arten von Aktualisierungsanomalien?

Ich habe 'Datenbanksysteme: Ein praktischer Ansatz für Design, Implementierung und Verwaltung' von Connolly und Begg gelesen, um die Datenbanknormalisierung zu verstehen (Kapitel 14). Ich verstehe jetzt die drei Formulare zur Datenbanknormalisierung besser:

  • Erste Normalform (1NF)
  • Zweite Normalform (2NF)
  • Dritte Normalform (3NF)

Ich verstehe auch die drei Update-Anomalien:

  • Insertionsanomalie
  • Löschanomalie
  • Aktualisierungs-/Änderungsanomalie

Was ich jetzt nur schwer verstehen kann, ist, wie man die beiden miteinander verbindet. Welche der verschiedenen Formen helfen beispielsweise, die Einfügeanomalie zu beheben? Ähnliches gilt für die anderen Anomalien. Idealerweise möchte ich die Zuordnungsbeziehung zwischen den beiden Gruppen kennen und wissen, warum diese Formen die bestimmte Anomalie beheben.

Dies ist meine erste Frage hier und ich habe bei Google und dieser Website gesucht, um zuerst eine Antwort zu finden, aber ohne Erfolg.

Vielen Dank.

5
the_butler

1NF ist im Grunde nur "nicht zu viele Daten in einer einzigen Spalte speichern", daher denke ich, dass 2NF und 3NF die primäre Lösung für alle 3 Datenbankanomalien sind, da sowohl 2NF als auch 3NF das Aufteilen von Elementen in ihre eigenen Tabellen beinhalten:

  1. Einfügeanomalie : Wenn Sie eine große enrollment -Tabelle haben, die sowohl "Klassen" - als auch "Schüler" -Daten enthält (von denen keine an anderer Stelle vorhanden ist) ), dann können Sie keinen neuen (leeren) Kurs ohne mindestens einen entsprechenden Schüler eingeben (da die Tabelle eine Aufzeichnung Ihrer Einschreibungen ist). Wenden Sie also 2NF an und erstellen Sie separate Tabellen für classes, students und stellen Sie Ihre ursprüngliche enrollment -Tabellenverknüpfung sowohl nach ClassID als auch nach StudentID her. Jetzt können Sie neue Klassen ohne Schüler und neue Schüler ohne Klassen eingeben.

  2. Löschanomalie : Wie oben, wenn jede Zeile Ihrer ursprünglichen enrollment -Tabelle die vollständigen Details des Schülers und die vollständigen Details von enthält die Klasse, in der sie eingeschrieben sind, und dann den zuletzt eingeschriebenen Schüler für eine Klasse entfernen entfernt die letzten Informationen zu dieser Klasse. Die Lösung ist dieselbe. Wenden Sie 2NF an, um separate Tabellen zu erstellen, damit die Schüler eingeschrieben oder abgemeldet werden können, ohne die Klasseninformationen zu verlieren.

  3. Aktualisierungsanomalie : Wie oben kann bei Verwendung der Einzeltabellenmethode das Aktualisieren von Informationen (z. B. der Zimmernummer) für eine Klasse mit mehreren eingeschriebenen Schülern dazu führen zu einer Situation, in der einige Zeilen neue Informationen waren und andere Zeilen die alten. Das Anwenden von 2NF wie oben ist wieder die Lösung, sodass Klassendaten nur an einer Stelle geändert werden (der Tabelle classes).

Beachten Sie, dass 1NF in Ihrem Prozess immer noch einige Rolle spielt, da Sie nicht versuchen können, das Problem zu lösen, indem Sie eine ganze Liste eingeschriebener Schüler in ein einzelnes Feld packen oder student1, student2, student3 Felder oder so ähnlich.

Wir könnten ähnliche Beispiele finden, bei denen der Faktor 3NF anstelle von 2NF ist: Wenn jeder "Student" einen Fakultätsberater hat (und einige Berater mehreren Studenten zugewiesen sind), ist dies möglicherweise nicht Teil des Schlüssels für unseren Studententisch , aber es ist ein "abhängiges Attribut" und könnte zu einigen der gleichen Probleme wie oben führen. So konnte der Fakultätsberater in einen eigenen Tisch aufgeteilt werden.

Einige Ressourcen, die ich hilfreich fand:

5
BradC

Ich werde mir das Beispiel einfallen lassen, das ich gelernt habe. Bei 1Nf geht es darum, die sich wiederholenden Gruppen in verschiedene Tabellen zu unterteilen, und alle Attribute sollten atomar sein.

Nehmen wir an, wir haben eine Tabelle, die die folgenden Attribute enthält. Purchase_order_No, Purchase_date, Emp_code, Supplier_Name, Supplier_No, Part_No Part_description, Part_Quantity

  • 1NF: Hier können innerhalb einer einzelnen Bestellung mehrere Teile bestellt werden, sodass die entsprechenden Daten wiederholt werden. So können wir part_no, part_description, part_quantity trennen und part_no, purchase_order_no als Primärschlüssel festlegen. aber wir werden hier Anomalien haben ..

    1. anomalie einfügen: da es jetzt 2 Tabellen gibt. Wir können kein Teil einfügen, das nicht gekauft wurde.
    2. anomalie löschen: Wenn es einen einzelnen Kauf für ein bestimmtes Teil gab und diese Bestellung gelöscht wurde, haben wir dieses Teil überhaupt nicht in unserer Tabelle.
    3. update-Anomalie: Um die Beschreibung eines bestimmten Teils zu ändern, müssen wir es an allen Stellen aktualisieren, an denen es gekauft wurde.
  • 2NF: Damit eine Tabelle in der zweiten Form vorliegt, sollten alle ihre Attribute vollständig von ihrem Primärschlüssel abhängen. Um beispielsweise die Teilemenge zu kennen, müssen wir die Teilenummer und die Bestellung kennen. Für die Teilebeschreibung ist Teil Nr. jedoch nur ausreichend, sodass wir sie in Tabellen aufteilen. Lieferantenname nicht d

    1. anomalie einfügen: Wenn wir einen Lieferanten einfügen müssten, der keine Bestellung hat, ist dies nicht möglich.
    2. anomalie löschen: Wenn wir die letzte Einzelbestellung eines Lieferanten löschen, gehen auch die Daten des Lieferanten verloren.
    3. anomalie aktualisieren: Um einen Lieferanten zu aktualisieren, muss jede Bestellung des Lieferanten aktualisiert werden.
  • 3Nf: Damit sich eine Tabelle in 3NF befindet, sollte es kein Attribut geben, das auch von einem anderen Nichtschlüsselattribut abhängig ist. Hier haben wir den Lieferantennamen, der auch in sup-no abhängig ist, also setzen wir sie in eine andere Tabelle. Dabei ist sup_no der Primärschlüssel.

jetzt können die Tabellen nicht weiter zerlegt werden, aber die Anomalien können weiterhin bestehen bleiben. Wir können keine perfekt normalisierten Datentabellen bilden. hoffe das klärt dich.

2
vidya