Bei der dritten Normalform (3NF) handelt es sich um ein Datenbankprinzip, das die Integrität von Daten unterstützt, indem es auf den von First Normal Form (1NF) und Second Normal Form (2NF) bereitgestellten Datenbanknormalisierungsprinzipien aufbaut.
Anforderungen an die dritte Normalform
Es gibt zwei Grundvoraussetzungen für eine dritte Normalform einer Datenbank:
- Die Datenbank muss bereits die Anforderungen von 1NF und 2NF erfüllen.
- Alle Datenbankspalten müssen vom Primärschlüssel abhängig sein. Das bedeutet, dass der Wert jeder Spalte nur vom Primärschlüssel abgeleitet werden kann.
Über die Primärschlüsselabhängigkeit
Untersuchen wir weiter, was wir unter der Tatsache verstehen, dass alle Spalten vom Primärschlüssel abhängen müssen.
Wenn der Wert einer Spalte sowohl vom Primärschlüssel als auch von einer anderen Spalte in der Tabelle abgeleitet werden kann, verstößt er gegen 3NF. Betrachten Sie eine Employees-Tabelle mit diesen Spalten:
- Mitarbeiter-ID
- Vorname
- Nachname
Hängen sowohl Nachname als auch Vorname nur vom Wert der EmployeeID ab? Nun, könnte LastName von FirstName abhängen? Nein, weil nichts, was in LastName inhärent ist, den Wert von FirstName vorschlagen würde. Könnte FirstName von Nachname abhängen? Nein, noch einmal, weil dasselbe gilt: Was auch immer ein Nachname sein mag, er könnte keinen Hinweis auf den Wert von Vorname geben. Daher ist diese Tabelle 3NF-kompatibel.
Aber betrachten Sie diese Tabelle für Fahrzeuge:
- Fahrzeugidentifikation
- Hersteller
- Modell
Der Hersteller und das Modell könnten von der VehicleID abgeleitet sein, aber das Modell könnte auch vom Hersteller stammen, da ein Fahrzeugmodell nur von einem bestimmten Hersteller hergestellt wird. Dieses Tabellendesign ist nicht mit 3NF kompatibel und kann daher zu Datenanomalien führen. Sie können beispielsweise den Hersteller aktualisieren, ohne das Modell zu aktualisieren, wodurch Ungenauigkeiten entstehen.
Um dies zu gewährleisten, müssen Sie die zusätzliche abhängige Spalte in eine andere Tabelle verschieben und mit einem Fremdschlüssel darauf verweisen. Dies würde zu zwei Tabellen führen:
Fahrzeuge Tabelle
In der folgenden Tabelle ist die ModelID ein Fremdschlüssel für die Modelle Tabelle:
- Fahrzeugidentifikation
- Hersteller
- ModelID
Models-Tabelle
In dieser neuen Tabelle werden Modelle den Herstellern zugeordnet. Wenn Sie Fahrzeuginformationen aktualisieren möchten, die für ein Modell spezifisch sind, tun Sie dies in dieser Tabelle und nicht in der Tabelle Fahrzeuge.
- ModelID
- Hersteller
- Modell
Abgeleitete Felder im 3NF-Modell
Eine Tabelle kann ein abgeleitetes Feld enthalten - eines, das basierend auf anderen Spalten in der Tabelle berechnet wird. Betrachten Sie beispielsweise diese Tabelle der Widgetbestellungen:
- Bestellnummer
- Kundennummer
- Stückpreis
- Menge
- Gesamt
Die Summe unterbricht 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. Wir müssen es aus der Tabelle entfernen, um der dritten Normalform zu entsprechen.
Da es abgeleitet ist, ist es besser, es überhaupt nicht in der Datenbank zu speichern.
Wir können es einfach "on the fly" berechnen, wenn Sie Datenbankabfragen durchführen. Beispielsweise haben wir diese Abfrage zuvor zum Abrufen von Bestellnummern und Summen verwendet:
SELECT Bestellnummer, Gesamtzahl FROM WidgetOrders
Wir können jetzt die folgende Abfrage verwenden:
SELECT Bestellnummer, Einheitspreis * Menge AS Total FROM WidgetOrders
die gleichen Ergebnisse zu erzielen, ohne die Normalisierungsregeln zu verletzen.