Was ist die dritte Normalform (3NF)?

Stellen Sie sich vor, Sie arbeiten mit einer massiven, unstrukturierten Datenbank, die mit wiederholten, redundanten Informationen gefüllt ist. Jedes Update oder Löschen birgt ein potentielles Desaster und bringt das Risiko von Fehlern und Inkonsistenzen mit sich. Die dritte Normalform (3NF) ist eine bewährte Methode zur Datenbanknormalisierung, um dieses Chaos zu vermeiden. Durch die Implementierung von 3NF wird Ihre Datenstruktur aufgeräumt, was sicherstellt, dass sie effizient, organisiert und frei von unnötigen Redundanzen ist.

In diesem Artikel werden wir untersuchen, wie 3NF funktioniert, warum es wertvoll ist und wie Sie es in die Praxis umsetzen können. Wir werden auch 3NF mit anderen Formen vergleichen und lernen, wann jede Form verwendet werden sollte. Jeder kann von einer vertieften Kenntnis über diese Strukturen profitieren, aber dieses Wissen ist besonders wertvoll, wenn Sie ein Datenbankdesigner oder Datenwissenschaftler sind, da es Ihre Arbeit erheblich vereinfachen und Ihre Datenbanken zuverlässig halten kann. Wenn Sie an Datenbankdesign im Allgemeinen interessiert sind, werfen Sie einen Blick auf unseren vollständigen Datenbankdesign-Kurs.

Definition der dritten Normalform (3NF)

Die Dritte Normalform ist ein Schlüsselkonzept der Datenbanknormalisierung, das unerwünschte Abhängigkeiten entfernt. Die 3NF baut auf der ersten Normalform (1NF) und der zweiten Normalform (2NF) auf, was bedeutet, dass sie ihre Regeln erbt: Die 1NF erfordert atomare (unteilbare) Werte in jeder Zelle, und die 2NF entfernt partielle Abhängigkeiten von einem zusammengesetzten Primärschlüssel. Die 3NF geht noch weiter, indem sie transitive Abhängigkeiten entfernt, eine Situation, in der Nicht-Schlüsselattribute indirekt vom Primärschlüssel abhängen.

Indem sie sich darauf konzentriert, stellt die 3NF sicher, dass jede Nicht-Schlüsselspalte in einer Tabelle direkt mit dem Primärschlüssel und nichts anderem verbunden ist. In praktischeren Begriffen hilft die 3NF, Redundanz zu minimieren und Anomalien beim Einfügen, Aktualisieren oder Löschen von Daten zu vermeiden.

In den 1970er Jahren führte Edgar F. Codd die 3NF ein, um die Bedingungen für die Erreichung einer vollständig normalisierten Datenbankstruktur zu formalisieren. Eine Neuformulierung durch Carlo Zaniolo einige Jahre später lieferte eine klarere Erklärung des Unterschieds zwischen der „klassischen“ 3NF und der strengeren Boyce-Codd-Normalform (BCNF). Machen Sie sich jetzt keine allzu großen Sorgen um die BCNF, wir werden darauf später zurückkommen.

Verständnis der Bedingungen für die Dritte Normalform

Also, was genau braucht es, um die 3NF zu erreichen? Damit eine Tabelle qualifiziert ist, muss sie einige Bedingungen erfüllen:

  • Muss sich in 2NF befinden: Das bedeutet, dass sie bereits atomar ist, ohne wiederholende Gruppen und ohne partielle Abhängigkeiten von irgendwelchen zusammengesetzten Schlüsseln.

3NF schließt 2NF und 1NF mit ein. Bild von Autor

  • Keine transitiven Abhängigkeiten: Diese Regel ist entscheidend. In einer 3NF-Tabelle muss sich jede Nicht-Primärschlüssel-Spalte ausschließlich vom Primärschlüssel abhängen, nicht indirekt über eine andere Nicht-Schlüssel-Spalte.

Lassen Sie uns einmal schauen, was das praktisch bedeutet.

Tabellen zerlegen, um die 3NF zu erreichen

Lassen Sie uns den Prozess der Zerlegung von Tabellen durchgehen, um die 3NF zu erreichen. Wir werden einige Beispieldaten aus den DataCamp-Kursen verwenden, um jeden Schritt zu veranschaulichen.

Schritt 1: Transitive Abhängigkeiten identifizieren

Zu Beginn suchen wir nach Attributen in einer Tabelle, die indirekt vom Primärschlüssel abhängen. Als Faustregel gilt: Wenn ein Attribut von etwas anderem als dem Primärschlüssel abhängt, deutet dies auf eine transitive Abhängigkeit hin. Das ist ein Zeichen dafür, dass es möglicherweise an der Zeit ist, Ihre Tabelle aufzuteilen.

Werfen Sie einen Blick auf die drei Tabellen unten. Welche hat eine transitive Abhängigkeit?

Tabelle 1: Kurs

Course ID Course Name Difficulty
201 SQL Grundlagen Anfänger
202 Einführung in Python Anfänger
203 Verständnis von Datenwissenschaft Fortgeschritten

Tabelle 2: Dozent

Instructor ID Instructor Name Expertise
1 Sarah Johnson Datenwissenschaft
2 Tom Williams Machine Learning
3 Emily Brown Python

Tabelle 3: Einschreibungen

Enrollment ID Student Name Course ID Course Name
1001 Alice Smith 201 SQL Grundlagen
1002 Bob Green 202 Einführung in Python
1003 Charlie Blue 201 SQL Grundlagen

Die Antwort ist… Tabelle 3!

In dieser Tabelle hängt Kursname von Kurs-ID ab, aber nicht direkt von Einschreibungs-ID (dem Primärschlüssel). Diese indirekte Abhängigkeit macht Kursname zu einer transitiven Abhängigkeit.

Schritt 2: Daten in neue Tabellen aufteilen

Um die transitive Abhängigkeit zu behandeln, werden wir Tabelle 1 in zwei Tabellen aufteilen. Jede Tabelle wird sich auf direkt abhängige Daten konzentrieren.

Überarbeitete Einschreibungenstabelle

Enrollment ID Student Name Course ID
1001 Alice Smith 201
1002 Bob Green 202
1003 Charlie Blue 201

Kursetabelle

Course ID Course Name
201 SQL-Grundlagen
202 Einführung in Python

Jetzt enthält jede Tabelle nur Informationen, die direkt von ihrem Primärschlüssel abhängen: Kurs ID ist jetzt der Primärschlüssel für Kursname in der Tabelle Kurse und Belegungs ID ist der Primärschlüssel in der Tabelle Belegungen.

Mit dieser Dekomposition erfüllen die Tabellen nun die Anforderungen an die Dritte Normalform, eliminieren Redundanzen und stellen sicher, dass jede Tabelle nur direkt relevante Informationen speichert.

Wenn Sie praktische Erfahrungen sammeln und Ihre eigenen Datenbanken erstellen möchten, werfen Sie einen Blick auf unseren Kurs „Erstellung von PostgreSQL-Datenbanken“. Wenn Sie etwas fortgeschrittener sind, könnten Sie „Einführung in die Datenmodellierung in Snowflake“ ausprobieren, das Ideen wie das Entity-Relationship- und das dimensionale Modellieren abdeckt.

Vor- und Nachteile der Verwendung der Dritten Normalform

Also, warum all diese Mühe auf sich nehmen, um die 3NF zu erreichen? Hier sind die Hauptvorteile:

  • Verbesserte Datenintegrität: Durch die Beseitigung transitiver Abhängigkeiten hilft der 3NF sicherzustellen, dass Aktualisierungen und Löschungen nicht zu widersprüchlichen oder veralteten Daten in verschiedenen Tabellen führen.
  • Reduzierte Redundanz: Weniger Redundanz bedeutet, dass Ihre Datenbank einfacher zu pflegen ist und der Speicherplatz reduziert wird.
  • Einfachere Datenwartung: Das Aufbewahren ähnlicher Informationen in dedizierten Tabellen erleichtert das Aktualisieren von Datensätzen, ohne redundante Einträge suchen zu müssen.

Das gesagt, während 3NF-Strukturen die Datenakkuratheit unterstützen, können sie auch zu stärker segmentierten Daten führen, was manchmal komplexe Abfragen aufgrund zusätzlicher Tabellenverknüpfungen langsamer macht. In Fällen, in denen die Notwendigkeit für Geschwindigkeit die Notwendigkeit für Normalisierung übertrumpft, können BCNF oder 4NF praktischere Optionen sein.

Vergleich: Erste, Zweite, Dritte und Boyce-Codd Normalformen

Schauen wir uns die Unterschiede der Formen an.

Vergleichstabelle: erste, zweite und dritte Normalformen

Hier ist eine Vergleichstabelle, die Ihnen hilft, die Anforderungen von 1NF, 2NF und 3NF zu verstehen.

Feature 1NF 2NF 3NF
Atomare Daten
Keine partiellen Abhängigkeiten
Keine transitiven Abhängigkeiten

Dritte Normalform vs. Boyce-Codd-Normalform (BCNF)

BCNF ist eine „strengere“ Form von 3NF, die zusätzliche Anomalien eliminiert, die bei überlappenden Schlüsselkandidaten auftreten. Es kann besonders nützlich sein in komplexen Fällen, in denen 3NF allein Abhängigkeiten nicht vollständig eliminiert. BCNF gilt, wenn ein Nichtschlüsselattribut von einem Attribut abhängt, das Teil eines zusammengesetzten Schlüsselkandidaten ist. Ich weiß, das klingt komplex, also lasst uns das anhand eines Beispiels aufschlüsseln.

Aktuelle Struktur (in 3NF)

Nach der Dekomposition zur Erreichung von 3NF hatten wir diese zwei Tabellen:

Belegungen Tabelle

Enrollment ID Student Name Course ID
1001 Alice Smith 201
1002 Bob Green 202
1003 Charlie Blue 201

Kurse Tabelle

Course ID Course Name
201 SQL Grundlagen
202 Einführung in Python

In dieser Struktur befindet sich jede Tabelle in 3NF ohne transitive Abhängigkeiten, und die Daten sind angemessen normalisiert.

Einführung einer neuen Anforderung

Jetzt fügen wir Kursen eine neue Eigenschaft hinzu: den Klassenraum, in dem jeder Kurs stattfindet. Diese neue Eigenschaft könnte zu einem Szenario führen, das BCNF erfordert.

Aktualisierte Kurse Tabelle (3NF)

Course ID Course Name Classroom
201 SQL Grundlagen Raum 101
202 Einführung in Python Raum 102
203 Verständnis von Data Science Raum 101

Hier ist Kurs-ID immer noch der Primärschlüssel, und alle anderen Attribute hängen direkt davon ab. Aber nehmen wir an, es gibt eine neue Regel, dass jeder Klassenraum immer nur ein Fach gleichzeitig belegen kann. Angenommen, der KursnameSQL-Grundlagen“ unter verschiedenen Kurs-IDs (wie 201, 204 usw.) angeboten werden könnte, wenn sie zu unterschiedlichen Zeiten geplant wären. In diesem Fall würde jede Durchführung von „SQL-Grundlagen“ unabhängig von der spezifischen Kurs-ID im „Raum 101“ stattfinden. Als Ergebnis bestimmt der Kursname auch eindeutig den Klassenraum.

Dies bedeutet, dass wir jetzt zwei Kandidatenschlüssel haben:

  1. Kurs-ID
  2. Kursname

Mit beiden Kandidatenschlüsseln haben wir jetzt ein Problem, das die 3NF nicht anspricht: Klassenraum hängt von Kursname ab, statt nur von Kurs-ID.

Anwendung von BCNF

Um dieses Abhängigkeitsproblem zu beseitigen, müssen wir die Kurse Tabelle weiter in zwei separate Tabellen aufteilen, die besser mit BCNF übereinstimmen:

  1. Eine neue Kurse Tabelle, die nur die Kurs ID und Kursname enthält.
  2. Eine Kursdetails Tabelle, die die Kursname und Klassenzimmer Zuordnung speichert.

So sieht es aus:

Überarbeitete Kurse Tabelle (BCNF)

Kursdetails Tabelle (BCNF)

Course Name Classroom
SQL Grundlagen Raum 101
Einführung in Python Raum 102
Verständnis von Datenwissenschaft Raum 101

Mit dieser neuen Struktur erfüllt jede Tabelle die BCNF-Bedingungen:

  • In der Kurse-Tabelle ist die Kurs-ID der Primärschlüssel, und alle Attribute hängen ausschließlich von ihm ab.
  • In der Kursdetails Tabelle Kursname ist der Primärschlüssel, und Klassenraum hängt nur von Kursname ab.

Dieses Setup beseitigt alle Abhängigkeitsprobleme, die durch sich überschneidende Kandidatenschlüssel verursacht werden, und gewährleistet eine streng normierte Struktur.

Conclusion

Die dritte Normalform ist ein wertvolles Werkzeug für Datenbankdesigner, die darauf abzielen, Daten sauber, konsistent und frei von problematischen Abhängigkeiten zu halten. Mit der 3NF wird die Datenintegrität verbessert, was das Management erleichtert und Redundanzen reduziert. Denken Sie daran, dass während die 3NF in den meisten Situationen gut funktioniert, komplexere Datenbanken von zusätzlichen Formen wie BCNF oder 4NF profitieren könnten.

Wenn Ihnen dieser Artikel geholfen hat, erwägen Sie den nächsten Schritt, indem Sie unsere SQL Associate Certification erwerben. Es ist eine großartige Möglichkeit, Ihre SQL- und Datenbankverwaltungsfähigkeiten zu validieren und Ihr Fachwissen potenziellen Arbeitgebern zu demonstrieren!

Source:
https://www.datacamp.com/tutorial/third-normal-form