Setzen einer Datenbank in die dritte Normalform (3NF)
Die dritte Normalform (3NF) ist ein Datenbankprinzip, das die Integrität von Daten unterstützt, indem es auf Prinzipien der Datenbanknormalisierung zur Verfügung gestellt von erste Normalform (1NF) und zweite Normalform (2NF). Der Zweck von 3NF besteht darin, die Datenbankverarbeitung zu verbessern und gleichzeitig die Speicherkosten zu minimieren.
Anforderungen an die dritte Normalform
Es gibt zwei Grundvoraussetzungen für eine Datenbank in 3NF:
- Die Datenbank muss die Anforderungen von 1NF und 2NF erfüllen.
- Alle Datenbankspalten müssen von der Primärschlüssel, was bedeutet, dass der Wert jeder Spalte nur vom Primärschlüssel abgeleitet werden kann.
Primärschlüsselabhängigkeit
Lassen Sie uns weiter untersuchen, was wir damit meinen, dass alle Spalten vom Primärschlüssel abhängen müssen. Wenn der Wert einer Spalte sowohl aus dem Primärschlüssel als auch aus einer anderen Spalte in der Tabelle abgeleitet werden kann, verstößt er gegen 3NF. Betrachten Sie eine Tabelle mit Mitarbeitern mit diesen Spalten:
- Angestellten ID
- Vorname
- Nachname
Hängen sowohl Nachname als auch Vorname nur vom Wert von EmployeeID ab? Nun, könnte Nachname von Vorname abhängen? Nein, denn nichts, was LastName innewohnt, würde den Wert von FirstName vorschlagen.
Könnte FirstName von LastName abhängen? Nein, denn das Gleiche gilt: Was auch immer ein Nachname sein mag, er kann keinen Hinweis auf den Wert von Vorname geben. Daher ist diese Tabelle 3NF-kompatibel.
Betrachten Sie dann diese Fahrzeugtabelle:
- Fahrzeugkennnummer
- Hersteller
- Modell
Der Hersteller und das Modell könnten von der VehicleID abgeleitet werden, aber das Modell könnte auch vom Hersteller abgeleitet werden, da nur ein bestimmter Hersteller ein Fahrzeugmodell herstellt. Dieses Tabellendesign ist nicht-3NF-konform und kann daher zu Datenanomalien führen. Sie können beispielsweise den Hersteller aktualisieren, ohne das Modell zu aktualisieren, wodurch Ungenauigkeiten entstehen.
Setzen einer Datenbank in die dritte Normalform (3NF)
Verschieben der zusätzlichen abhängigen Spalte in eine andere Tabelle und Referenzieren mit a Unbekannter Schlüssel würde es konform machen. Dies würde zu zwei Tabellen führen, die wir „Fahrzeuge“ und „Modelle“ nennen.
In der Tabelle „Fahrzeuge“ ist die ModelID ein Fremdschlüssel zur Tabelle „Modelle“:
- Fahrzeugkennnummer
- Hersteller
- Modell-ID
Die neue Tabelle „Modelle“ ordnet Modelle den Herstellern zu. Wenn Sie modellspezifische Fahrzeuginformationen aktualisieren möchten, tun Sie dies in dieser Tabelle und nicht in der Tabelle „Fahrzeuge“.
- Modell-ID
- Hersteller
- Modell
Abgeleitete Felder im 3NF-Modell
Eine Tabelle kann ein abgeleitetes Feld enthalten, das auf Grundlage anderer Spalten in der Tabelle berechnet wird. Betrachten Sie beispielsweise diese Tabelle mit Widget-Bestellungen:
- Bestellnummer
- Kundennummer
- Stückpreis
- Menge
- Gesamt
Die Summe verstößt gegen die 3NF-Konformität, da sie durch Multiplikation des Stückpreises mit der Menge abgeleitet werden kann, anstatt vollständig vom Primärschlüssel abhängig zu sein. Sie müssen Total aus der Tabelle entfernen, um der dritten Normalform zu entsprechen.
Da es abgeleitet ist, ist es besser, es gar nicht in der Datenbank zu speichern, sondern es bei Datenbankabfragen einfach im laufenden Betrieb zu berechnen. Zum Beispiel könnten wir diese Abfrage zuvor verwendet haben, um Bestellnummern und Gesamtsummen abzurufen:
SELECT Bestellnummer, Gesamt
VON WidgetOrders
Verwenden Sie nun die folgende Abfrage, um die gleichen Ergebnisse zu erzielen, ohne die Normalisierungsregeln zu verletzen:
SELECT OrderNumber, UnitPrice * Menge AS Total
VON WidgetOrders