Skip to main content

So konvertieren Sie eine Datenbank in die dritte Normalform (3NF)

Normalformen (1NF - 3NF) (April 2025)

Normalformen (1NF - 3NF) (April 2025)
Anonim

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.