Kurs
Was ist die zweite Normalform (2NF)?
Bei der Arbeit mit Datenbanken kommt es häufig zu Problemen wie redundanten Daten und inkonsistenten Aktualisierungen. Die zweite Normalform ist ein Datenbanknormalisierungsschritt, der auf der ersten Normalform (1NF) aufbaut, um sauberere und effizientere Tabellen zu erstellen.
Das Verständnis der 2NF ist für jeden, der sich mit Datenbankdesign oder Datenmanagement beschäftigt, von entscheidender Bedeutung und bildet die Grundlage für höhere Normalisierungsformen wie die dritte Normalform (3NF). In diesem Artikel erfahren wir, wie 2NF funktioniert und wie man Tabellen so umwandelt, dass sie die 2NF-Anforderungen erfüllen, mit praktischen Beispielen. Wir werden auch über die Vor- und Nachteile von 2NF sprechen und darüber, für welche Anwendungsfälle sie am besten geeignet ist.
Die zweite Normalform verstehen
Die zweite Normalform ist ein Datenbanknormalisierungsschritt, der sich auf die Beseitigung partieller Abhängigkeiten konzentriert. Sie wurde von Edgar F. Codd, dem Pionier der relationalen Datenbanken, im Rahmen seiner Arbeit zur Normalisierung eingeführt.
Damit eine Tabelle in 2NF sein kann, muss sie die Regeln der ersten Normalform erfüllen:
- Atomarität: Jede Zelle muss einen einzelnen Wert enthalten (keine sich wiederholenden Gruppen oder Arrays).
- Einzigartige Reihen: Die Tabelle muss einen eindeutigen Primärschlüssel haben.
2NF geht mit einer zusätzlichen Regel noch einen Schritt weiter: partielle Abhängigkeiten eliminieren.
Eine partielle Abhängigkeit liegt vor, wenn ein Nicht-Prime-Attribut (eine Spalte, die nicht Teil eines Kandidatenschlüssels ist) sich nur auf einen Teil eines zusammengesetzten Schlüssels bezieht und nicht auf den gesamten Schlüssel. Die 2NF-Regel stellt sicher, dass alle Attribute, die keine Primzahl sind, vom gesamten Primärschlüssel abhängen, nicht nur von einem Teil davon. Das Belassen partieller Abhängigkeiten in einer Tabelle bedeutet, dass sich redundante Daten in die Datenbank einschleichen können, was zu Ineffizienz und potenziellen Inkonsistenzen bei Aktualisierungen oder Löschungen führt.
Die Theorie allein kann ein bisschen trocken sein, also lass uns ein praktisches Beispiel anschauen.
Unten ist eine Kurseinschreibung Tabelle der DataCamp-Schüler/innen.
Schülerausweis | Kurs-ID | Kursname | Name des Ausbilders |
---|---|---|---|
1001 | 201 | SQL-Grundlagen | Ken Smith |
1002 | 202 | Einführung in Python | Merlin O’Donnell |
1001 | 202 | Einführung in Python | Merlin O’Donnell |
Hier ist der Primärschlüssel eine Kombination aus Schüler-ID und Kurs-ID. Die Nicht-Prime-Attribute Kursname und Kursgebühr hängen jedoch nur von der Kurs-ID ab , nicht vom gesamten Schlüssel. Dies verstößt gegen 2NF.
Schritte zur Zerlegung von Tabellen zur Erreichung von 2NF
Um sicherzustellen, dass eine Tabelle den Regeln der 2NF folgt, musst du das tun:
- Identifiziere alle in Frage kommenden Schlüssel: Bestimme die minimalen Mengen von Attributen, die die Zeilen der Tabelle eindeutig identifizieren. Dies sind deine Kandidatenschlüssel.
- Bestimme die funktionalen Abhängigkeiten: Identifiziere alle funktionalen Abhängigkeiten in der Tabelle. Suche insbesondere nach Abhängigkeiten, bei denen Nicht-Prime-Attribute (die nicht Teil eines Kandidatenschlüssels sind) nur von einem Teil eines zusammengesetzten Schlüssels abhängen.
- Eliminiere partielle Abhängigkeiten: Für jede Teilabhängigkeit:
- Verschiebe die abhängigen Attribute zusammen mit dem Teil des Schlüssels, von dem sie abhängen, in eine neue Tabelle.
- Stelle sicher, dass die neue Tabelle einen eindeutigen Primärschlüssel hat.
- Wiederhole diesen Vorgang, bis keine Teilabhängigkeiten mehr bestehen: Bestätige, dass jedes Nicht-Primärattribut in allen Tabellen vollständig von seinem jeweiligen Primärschlüssel abhängig ist.
Beispiele für die zweite Normalform in der Praxis
Schauen wir uns nun zwei Beispiele an.
Beispiel 1: Tabelle der Kurseinschreibungen
Vorhin haben wir die folgende Tabelle mit den Kursanmeldungen gesehen:
Schülerausweis | Kurs-ID | Kursname | Name des Ausbilders |
---|---|---|---|
1001 | 201 | SQL-Grundlagen | Ken Smith |
1002 | 202 | Einführung in Python | Merlin O’Donnell |
1001 | 202 | Einführung in Python | Merlin O’Donnell |
Folgen wir den Schritten, die wir im vorherigen Abschnitt beschrieben haben.
1. Identifiziere unseren Kandidatenschlüssel.
In diesem Fall ist der Kandidatenschlüssel ein zusammengesetzter Schlüssel aus Schüler-ID und Kurs-ID. Diese eindeutige Kombination identifiziert jede Zeile in der Tabelle.
2. Bestimme unsere funktionalen Abhängigkeiten
Der Kursname und der Name des Kursleiters hängen von der Kurs-ID ab , nicht vom vollständigen zusammengesetzten Schlüssel (Schüler-ID, Kurs-ID). Dies ist eine partielle Abhängigkeit, weil diese Attribute nur von einem Teil des zusammengesetzten Schlüssels abhängen.
3. Eliminiere partielle Abhängigkeiten
Wir müssen die Attribute verschieben, die nur von einem Teil des Schlüssels abhängen (Kursname und Name des Lehrers) in eine neue Tabelle verschieben, die ausschließlich auf der Kurs-ID.
Nach der Dekomposition sehen unsere neuen Tabellen wie folgt aus:
Tabelle der Kurseinschreibungen
Schülerausweis | Kurs-ID |
---|---|
1001 | 201 |
1002 | 202 |
1001 | 202 |
Tabelle mit den Kursdetails
Kurs-ID | Kursname | Name des Ausbilders |
---|---|---|
201 | SQL-Grundlagen | Ken Smith |
202 | Einführung in Python | Merlin O’Donnell |
Wenn du selbst Hand anlegen und deine eigene Datenbank erstellen willst, schau dir unseren PostgresQL-Kurs an. Wenn du schon etwas fortgeschrittener bist, könntest du diese Einführung in die Datenmodellierung in Snowflake ausprobieren, in der Ideen wie Entity-Relationship und Dimensionsmodellierung behandelt werden.
Beispiel 2: Tabelle der Bestellungen
Wir beginnen mit dieser Tabelle der Bestellungen. Versuche, die oben beschriebenen Schritte zu befolgen und diese Tabelle selbst zu zerlegen!
Bestell-ID | Produkt-ID | Bestelldatum | Produktname | Name des Lieferanten |
---|---|---|---|---|
1 | 201 | 2024-11-01 | Laptop | TechSupply |
1 | 202 | 2024-11-01 | Maus | TechSupply |
2 | 201 | 2024-11-02 | Laptop | TechSupply |
3 | 203 | 2024-11-03 | Tastatur | KeyMasters |
1. Identifiziere unseren Kandidatenschlüssel
Die Kombination ausBestell-ID und Produkt-ID identifiziert jede Zeile eindeutig und macht (Bestell-ID, Produkt-ID) zu einem zusammengesetzten Kandidatenschlüssel. Keine einzelne Spalte kann Zeilen eindeutig identifizieren, denn:
- Die Bestell-ID allein ist nicht eindeutig, da mehrere Produkte Teil derselben Bestellung sein können.
- Die Produkt-ID allein ist nicht eindeutig, da dasselbe Produkt in verschiedenen Bestellungen auftauchen kann.
Das bedeutet, dass (Bestell-ID, Produkt-ID) auch unser Primärschlüssel ist.
2. Bestimme unsere funktionalen Abhängigkeiten
Das Bestelldatum hängt von der Bestell-ID ab (nicht von dem vollständigen zusammengesetzten Schlüssel). Dies ist eine teilweise Abhängigkeit.
Produktname und Lieferantenname hängen von der Produkt-ID ab (nicht vom vollständigen zusammengesetzten Schlüssel). Dies sind ebenfalls teilweise Abhängigkeiten.
3. Eliminiere partielle Abhängigkeiten
Wir müssen die Tabelle in kleinere Tabellen aufteilen, die jeweils eine logische Abhängigkeit adressieren.
Zunächst erstellen wir eine Tabelle für Bestellinformationen, die folgende Informationen enthält Bestell-ID.
Tabelle der Bestellungen
Bestell-ID | Bestelldatum |
---|---|
1 | 2024-11-01 |
2 | 2024-11-02 |
3 | 2024-11-03 |
Dann erstellen wir eine Tabelle, die Informationen zu folgenden Punkten enthält Produkt-ID.
Tabelle der Bestellungen
Produkt-ID | Produktname | Name des Lieferanten |
---|---|---|
201 | Laptop | TechSupply |
202 | Maus | TechSupply |
203 | Tastatur | KeyMasters |
Die ursprüngliche Tabelle ist jetzt auf den zusammengesetzten Schlüssel und die Beziehungen zwischen Bestellungen und Produkten reduziert.
Bestell-ID | Produkt-ID |
---|---|
1 | 201 |
1 | 202 |
2 | 201 |
3 | 203 |
Jetzt ist unsere Datenbank in 2NF, weil 1) alle partiellen Abhängigkeiten eliminiert wurden, und 2) non-prime-Attribute vollständig von ihren jeweiligen Primärschlüsseln abhängen.
Wann wird die zweite Normalform eingeführt?
Warum solltest du also deine Datenbank auf 2NF umstellen? Reicht das aus, oder solltest du einen Schritt weiter gehen und 3NF anstreben?
Vorteile und Grenzen der zweiten Normalform
Die zweite Normalform bietet mehrere Vorteile, die sie zu einem nützlichen Schritt im Prozess der Datenbanknormalisierung machen:
- Verbesserte Datenintegrität: Durch die Eliminierung partieller Abhängigkeiten minimiert 2NF Einfüge-, Aktualisierungs- und Löschungsanomalien, was zu einer zuverlässigeren Datenbank führt.
- Verringerung der Redundanz: 2NF verringert die Wiederholung von Daten, optimiert die Speichernutzung und vereinfacht die Datenpflege.
- Verbesserte Datenstruktur: Sie legt den Grundstein für weitere Normalisierungen, wie die Weiterentwicklung zur dritten Normalform, indem sie ein saubereres und effizienteres Datenbankdesign schafft.
Aber es gibt auch einige Einschränkungen:
- Erhöhte Komplexität: Die Zerlegung von Tabellen zur Erfüllung der 2NF kann den Entwurfsprozess komplexer machen, vor allem wenn es um zusammengesetzte Schlüssel und Abhängigkeiten geht.
- Zusätzliche Fugen: Das Aufteilen von Tabellen kann mehr Joins in Abfragen erfordern, was sich auf die Leistung von Systemen mit großen Datensätzen oder komplexen Abfragen auswirken kann - mehr dazu weiter unten.
- Residuale Redundanz: 2NF reduziert zwar partielle Abhängigkeiten, geht aber nicht auf transitive Abhängigkeiten ein, sodass einige Redundanzen bestehen bleiben, bis sie in 3NF behandelt werden.
Leistungsüberlegungen mit der zweiten Normalform
Die Zerlegung von Tabellen, um partielle Abhängigkeiten zu beseitigen, kann sich direkt auf die Datenbankleistung auswirken. Einerseits wird durch das Erreichen von 2NF die Datenredundanz reduziert und die Konsistenz verbessert, was zu weniger Anomalien bei Einfüge-, Aktualisierungs- oder Löschvorgängen führt. Andererseits kann die Normalisierung die Anzahl der Tabellen erhöhen, was bedeutet, dass zusätzliche Joins notwendig sind, um zusammenhängende Daten abzurufen. Dies kann die Abfrageleistung bei großen Datensätzen beeinträchtigen.
Um sicherzustellen, dass deine normalisierte Datenbank performant bleibt, solltest du diese Best Practices befolgen:
- Indizierung: Verwende Indizes, um Joins zwischen zerlegten Tabellen zu beschleunigen.
- Abfrageoptimierung: Optimiere Abfragen, um die Kosten für zusätzliche Joins zu minimieren.
- Hybrider Ansatz: Kombiniere die Normalisierung mit der Denormalisierung in Bereichen, in denen die Leistung wichtig ist, z. B. bei Tabellen für die Berichterstattung.
- Regelmäßige Überwachung: Überprüfe kontinuierlich die Leistung deiner Datenbank mit Profiling-Tools, um mögliche Probleme zu erkennen.
Ist 2NF nur ein Übergangsschritt, um die dritte Normalform zu erreichen?
In den meisten Fällen streben Datenbankdesigner die dritte Normalform an, da sie die Redundanz weiter reduzieren und die Datenintegrität insgesamt verbessern kann. Das Erreichen von 3NF ist jedoch oft mit zusätzlichem Aufwand verbunden, z. B. mit der Erstellung weiterer Tabellen und Beziehungen, was zu Komplexität und Leistungseinbußen bei der Abfrageausführung führen kann.
Es gibt Fälle, in denen die zweite Normalform allein schon ausreicht. Wenn Einfachheit und schnelle Umsetzung im Vordergrund stehen, wie z.B. bei kleinen Projekten, Prototypen oder Situationen, in denen die Datenredundanz minimal ist, kann 2NF ausreichen. In Systemen, in denen alle Attribute bereits vollständig von einem einfachen Primärschlüssel abhängig sind, kann das Erreichen von 2NF das primäre Ziel der Reduzierung der partiellen Abhängigkeit erfüllen, ohne dass eine weitere Normalisierung erforderlich ist.
Über die zweite Normalform hinaus: zur dritten Normalform
Wenn du deine Datenbank weiter normalisieren willst, kannst du deine Tabellen immer wieder umstrukturieren, um die dritte Normalform zu erreichen.
3NF baut auf 2NF auf, indem sie transitive Abhängigkeiten berücksichtigt - Situationen, in denen Nicht-Schlüssel-Attribute von anderen Nicht-Schlüssel-Attributen abhängen und nicht vom Primärschlüssel. Diese Reihenfolge stellt sicher, dass jedes Attribut direkt vom Primärschlüssel abhängt und von nichts anderem.
Zum Beispiel in einer Tabelle, die die Einschreibungen für einen Kurs verfolgt:
- 2NF: Stellt sicher, dass Attribute wie der Kursname und der Name des Schülers/der Schülerin vollständig von ihren jeweiligen Primärschlüsseln abhängen (z. B. Schüler-ID und Kurs-ID). Dadurch werden partielle Abhängigkeiten vermieden, bei denen Nicht-Schlüssel-Attribute nur von einem Teil des zusammengesetzten Schlüssels abhängen.
- 3NF: Stellt sicher, dass Attribute wie z. B. Angaben zu Lehrkräften oder Abteilungen in separaten Tabellen gespeichert werden, um transitive Abhängigkeiten zu vermeiden.
3NF ist ideal für komplexere Systeme, bei denen Datenintegrität und Effizienz an erster Stelle stehen, insbesondere wenn das Datenvolumen wächst. Schau dir unseren Artikel Was ist die dritte Normalform? an, wenn du mehr über die 3NF und ihre restriktivere Form, die BCNF, erfahren möchtest.
Fazit
Die zweite Normalform ist ein wichtiger Schritt in der Datenbanknormalisierung und schließt die Lücke zwischen der 1NF und höheren Formen wie der 3NF. Durch die Beseitigung partieller Abhängigkeiten reduziert 2NF die Redundanz und verbessert die Zuverlässigkeit deiner Daten. Sie kann zwar zu einer gewissen Komplexität führen, aber die Vorteile einer verbesserten Datenintegrität und einer vereinfachten Wartung machen sie zu einem wichtigen Bestandteil eines effektiven Datenbankdesigns.
Wenn du bereit bist, deine Kenntnisse zu vertiefen, solltest du unseren Kurs Datenbankdesign besuchen, um dein Verständnis von Normalisierungstechniken und ihren praktischen Anwendungen zu vertiefen. Mit unserer SQL Associate-Zertifizierung kannst du außerdem deine SQL- und Datenbankmanagement-Kenntnisse unter Beweis stellen und potenziellen Arbeitgebern dein Fachwissen zeigen!
Abschließend möchte ich sagen: Wenn du ein Entscheidungsträger in einem Unternehmen bist und weißt, dass du daran arbeiten musst, sauberere und effizientere Datenbanken zu erstellen , solltest du in Erwägung ziehen, ein DataCamp für Unternehmen Demo-Anfrage. Wir helfen dir dabei, die Fähigkeiten deines Teams zu verbessern, damit du skalierbare Datenbanksysteme erstellen kannst, die die Effizienz deines Unternehmens und die Innovation fördern. Wir können sogar maßgeschneiderte Lernpfade und benutzerdefinierte Strecken erstellen.
2 oder mehr Personen ausbilden? Schau dir unsere Business-Lösungen an
Verschaffe deinem Team Zugang zur gesamten DataCamp-Bibliothek mit zentralisierten Berichten, Aufgaben, Projekten und mehr

Senior Software Engineer, Technical Writer und Berater mit einem Hintergrund in Physik. Wir helfen Start-ups in der Anfangsphase, ihr Potenzial auszuschöpfen und machen komplexe Konzepte für alle zugänglich.
2NF FAQs
Kann die zweite Normalform (2NF) auf Datenbanken ohne zusammengesetzte Schlüssel angewendet werden?
Ja! Während 2NF oft mit zusammengesetzten Schlüsseln arbeitet, können auch Tabellen mit nur einem Schlüssel den 2NF-Prinzipien folgen, wenn alle Attribute, die keine Primzahlen sind, vollständig vom Primärschlüssel abhängen.
Garantiert das Erreichen von 2NF die Eliminierung aller Redundanzen in einer Datenbank?
Nein. 2NF eliminiert zwar partielle Abhängigkeiten, aber nicht transitive Abhängigkeiten. Dafür musst du zur dritten Normalform (3NF) übergehen.
Gibt es Situationen, in denen eine Datenbank in 1NF ausreicht, ohne zu 2NF überzugehen?
Ja. In sehr einfachen Systemen mit minimaler Datenredundanz oder in Prototypen kann 1NF ausreichen. Ich würde generell nicht empfehlen, bei 1NF aufzuhören, es sei denn, du hast einen sehr spezifischen und gerechtfertigten Grund.
Was ist der Unterschied zwischen der 2NF und der dritten Normalform (3NF)?
2NF beseitigt partielle Abhängigkeiten und stellt sicher, dass die Attribute vom gesamten Schlüssel abhängen. 3NF geht noch weiter, indem sie transitive Abhängigkeiten beseitigt und sicherstellt, dass Attribute direkt vom Primärschlüssel abhängen und nicht von anderen Nicht-Schlüssel-Attributen.
Wie prüfe ich, ob meine bestehende Datenbank bereits in 2NF ist?
Du kannst dies überprüfen, indem du alle Tabellen mit zusammengesetzten Schlüsseln durchgehst und sicherstellst, dass alle Attribute, die keine Primzahlen sind, von dem gesamten zusammengesetzten Schlüssel abhängen und nicht nur von einem Teil davon.
Lernen mit DataCamp
Kurs
Creating PostgreSQL Databases
Kurs
Database Design
Der Blog
Die 20 besten Snowflake-Interview-Fragen für alle Niveaus

Nisha Arya Ahmed
15 Min.
Der Blog
Q2 2023 DataCamp Donates Digest
Der Blog
Top 30 Generative KI Interview Fragen und Antworten für 2024

Hesam Sheikh Hassani
15 Min.
Der Blog