Grundlagen der Datenbanken
Der Primärschlüssel einer Auftragstabelle (AuftragsNr, ArtikelNr, Menge, KundenNr, Kundenname) ist {AuftragsNr, ArtikelNr}, und ihre funktionalen Abhängigkeiten sind {AuftragsNr, ArtikelNr} → Menge, AuftragsNr → KundenNr und KundenNr → Kundenname. Welches ist das richtige Ergebnis, wenn diese Tabelle bis zur dritten Normalform normalisiert wird?
- AAuftragsposition(AuftragsNr, ArtikelNr, Menge, KundenNr), Kunde(KundenNr, Kundenname)
- BAuftragsposition(AuftragsNr, ArtikelNr, Menge), Auftrag(AuftragsNr, KundenNr), Kunde(KundenNr, Kundenname)
- CAuftragsposition(AuftragsNr, ArtikelNr, Menge), Auftrag(AuftragsNr, KundenNr, Kundenname)
Antwort und Erläuterung anzeigen
Antwort: B. Auftragsposition(AuftragsNr, ArtikelNr, Menge), Auftrag(AuftragsNr, KundenNr), Kunde(KundenNr, Kundenname)
Die zweite Normalform ist ein Zustand in erster Normalform, in dem keine Spalte nur von einem Teil des Primärschlüssels abhängt (keine partielle funktionale Abhängigkeit). AuftragsNr → KundenNr ist eine partielle funktionale Abhängigkeit, denn KundenNr wird allein durch AuftragsNr bestimmt, die nur ein Teil des Primärschlüssels ist; die ursprüngliche Tabelle ist also in erster, aber nicht in zweiter Normalform. Werden die durch AuftragsNr bestimmten Spalten in Auftrag(AuftragsNr, KundenNr, Kundenname) ausgelagert, entsteht die zweite Normalform. Die dritte Normalform ist ein Zustand in zweiter Normalform, in dem keine Spalte über eine Nicht-Schlüsselspalte bestimmt wird (keine transitive funktionale Abhängigkeit). In Auftrag bleibt die transitive funktionale Abhängigkeit AuftragsNr → KundenNr → Kundenname bestehen, daher wird auch Kunde(KundenNr, Kundenname) abgetrennt. Die drei Tabellen Auftragsposition(AuftragsNr, ArtikelNr, Menge), Auftrag(AuftragsNr, KundenNr) und Kunde(KundenNr, Kundenname) sind dann in dritter Normalform. Ein Join über AuftragsNr und KundenNr stellt die ursprüngliche Tabelle wieder her.