Normalisierung: Unterschied zwischen den Versionen
| (13 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
'''Normalisierung''' ist ein Verfahren zur '''Strukturierung von Datenbanktabellen'''. | '''Normalisierung''' ist ein Verfahren zur '''Strukturierung von Datenbanktabellen'''. | ||
Ziel ist es, '''Redundanzen zu vermeiden''' | Ziel ist es, '''Redundanzen zu vermeiden''', '''Datenkonsistenz sicherzustellen''' und '''Anomalien zu verhindern'''. | ||
== Ziel der Normalisierung == | == Ziel der Normalisierung == | ||
| Zeile 16: | Zeile 14: | ||
Große Tabellen werden in mehrere kleinere Tabellen aufgeteilt. | Große Tabellen werden in mehrere kleinere Tabellen aufgeteilt. | ||
Diese Tabellen werden über '''Primär- und Fremdschlüssel''' miteinander verknüpft. | Diese Tabellen werden über '''Primär- und Fremdschlüssel''' miteinander verknüpft. | ||
== Anomalien in Datenbanken == | |||
Werden Tabellen nicht korrekt normalisiert, können sogenannte '''Anomalien''' auftreten. | |||
Dabei handelt es sich um unerwünschte Nebenwirkungen beim Einfügen, Ändern oder Löschen von Daten. | |||
Man unterscheidet drei Arten von Anomalien: | |||
=== Einfügeanomalie === | |||
Ein Datensatz kann nicht gespeichert werden, ohne dass zusätzliche, eigentlich unnötige Informationen mit angegeben werden müssen. | |||
Beispiel: | |||
Ein neuer Artikel kann nicht erfasst werden, solange noch keine Bestellung existiert. | |||
=== Änderungsanomalie === | |||
Eine Information muss an mehreren Stellen geändert werden. | |||
Wird eine Stelle vergessen, entstehen widersprüchliche Daten. | |||
Beispiel: | |||
Der Kategoriename „Eingabegeräte“ muss in mehreren Zeilen angepasst werden. | |||
=== Löschanomalie === | |||
Durch das Löschen eines Datensatzes gehen unbeabsichtigt weitere Informationen verloren. | |||
Beispiel: | |||
Wird die letzte Bestellung eines Artikels gelöscht, verschwinden auch die Artikeldaten. | |||
=== Ursache === | |||
Anomalien entstehen durch '''Redundanz''' und fehlerhafte Tabellenstruktur. | |||
== Ziel der Normalisierung == | |||
Durch die Aufteilung in logisch getrennte Tabellen werden Anomalien vermieden und die Datenkonsistenz verbessert. | |||
== Normalformen == | == Normalformen == | ||
| Zeile 172: | Zeile 202: | ||
→ Die Tabellen befinden sich in der 3. Normalform. | → Die Tabellen befinden sich in der 3. Normalform. | ||
== Durchgehendes Beispiel: 1NF → 2NF → 3NF == | |||
=== Ausgangstabelle (nicht normalisiert) === | |||
Problem: Mehrere Artikel stehen in einer Zelle. | |||
{| class="wikitable" | |||
! Bestellnr !! Kunde !! Artikel | |||
|- | |||
| 1001 || Müller || A01:Tastatur:1:Eingabegeräte, A02:Maus:2:Eingabegeräte | |||
|- | |||
| 1002 || Schmidt || A01:Tastatur:1:Eingabegeräte | |||
|} | |||
→ Wiederholungsgruppen vorhanden | |||
→ Nicht in 1NF | |||
=== 1. Normalform (1NF) === | |||
Regel: Alle Werte sind atomar (eine Information pro Zelle). | |||
{| class="wikitable" | |||
! Bestellnr !! Kunde !! Artikelnr !! Artikelname !! KategorieID !! Kategoriename !! Menge | |||
|- | |||
| 1001 || Müller || A01 || Tastatur || 1 || Eingabegeräte || 1 | |||
|- | |||
| 1001 || Müller || A02 || Maus || 1 || Eingabegeräte || 2 | |||
|- | |||
| 1002 || Schmidt || A01 || Tastatur || 1 || Eingabegeräte || 1 | |||
|} | |||
Primärschlüssel: | |||
* (Bestellnr, Artikelnr) | |||
=== 2. Normalform (2NF) === | |||
Problem: Teilabhängigkeit. | |||
In der 1NF-Tabelle ist der Primärschlüssel zusammengesetzt: (Bestellnr, Artikelnr). | |||
* '''Artikelname''', '''KategorieID''' und '''Kategoriename''' hängen nur von '''Artikelnr''' ab. | |||
* '''Kunde''' hängt nur von '''Bestellnr''' ab. | |||
Beides sind Teilabhängigkeiten → 2NF verletzt. | |||
=== Lösung (Aufteilung in 3 Tabellen) === | |||
'''Tabelle: Bestellung''' | |||
{| class="wikitable" | |||
! Bestellnr !! Kunde | |||
|- | |||
| 1001 || Müller | |||
|- | |||
| 1002 || Schmidt | |||
|} | |||
'''Tabelle: Bestellposition''' | |||
{| class="wikitable" | |||
! Bestellnr !! Artikelnr !! Menge | |||
|- | |||
| 1001 || A01 || 1 | |||
|- | |||
| 1001 || A02 || 2 | |||
|- | |||
| 1002 || A01 || 1 | |||
|} | |||
'''Tabelle: Artikel''' | |||
{| class="wikitable" | |||
! Artikelnr !! Artikelname !! KategorieID !! Kategoriename | |||
|- | |||
| A01 || Tastatur || 1 || Eingabegeräte | |||
|- | |||
| A02 || Maus || 1 || Eingabegeräte | |||
|} | |||
→ Jetzt hängen alle Nicht-Schlüsselattribute vollständig vom jeweiligen Primärschlüssel ab. | |||
→ 2NF erfüllt. | |||
=== 3. Normalform (3NF) === | |||
Problem: Transitive Abhängigkeit. | |||
Kategoriename hängt von KategorieID ab, | |||
nicht direkt von Artikelnr. | |||
Artikelnr → KategorieID → Kategoriename | |||
Lösung: Kategorie auslagern. | |||
'''Tabelle: Artikel''' | |||
{| class="wikitable" | |||
! Artikelnr !! Artikelname !! KategorieID | |||
|- | |||
| A01 || Tastatur || 1 | |||
|- | |||
| A02 || Maus || 1 | |||
|} | |||
'''Tabelle: Kategorie''' | |||
{| class="wikitable" | |||
! KategorieID !! Kategoriename | |||
|- | |||
| 1 || Eingabegeräte | |||
|} | |||
→ Keine transitive Abhängigkeit mehr | |||
→ 3NF erfüllt | |||
== Kurzüberblick == | |||
* 1NF → atomare Werte | |||
* 2NF → keine Teilabhängigkeit | |||
* 3NF → keine transitive Abhängigkeit | |||
== Kurzmerksatz == | |||
'''1NF: atomar – 2NF: keine Teilabhängigkeit – 3NF: keine transitive Abhängigkeit.''' | |||
== Vorteile der Normalisierung == | == Vorteile der Normalisierung == | ||
Aktuelle Version vom 23. Februar 2026, 15:37 Uhr
Normalisierung ist ein Verfahren zur Strukturierung von Datenbanktabellen. Ziel ist es, Redundanzen zu vermeiden, Datenkonsistenz sicherzustellen und Anomalien zu verhindern.
Ziel der Normalisierung
Durch Normalisierung sollen:
- doppelte Datenspeicherung vermieden werden
- Einfüge-, Änderungs- und Löschanomalien verhindert werden
- Tabellen logisch und übersichtlich aufgebaut sein
Grundprinzip
Große Tabellen werden in mehrere kleinere Tabellen aufgeteilt. Diese Tabellen werden über Primär- und Fremdschlüssel miteinander verknüpft.
Anomalien in Datenbanken
Werden Tabellen nicht korrekt normalisiert, können sogenannte Anomalien auftreten. Dabei handelt es sich um unerwünschte Nebenwirkungen beim Einfügen, Ändern oder Löschen von Daten.
Man unterscheidet drei Arten von Anomalien:
Einfügeanomalie
Ein Datensatz kann nicht gespeichert werden, ohne dass zusätzliche, eigentlich unnötige Informationen mit angegeben werden müssen.
Beispiel: Ein neuer Artikel kann nicht erfasst werden, solange noch keine Bestellung existiert.
Änderungsanomalie
Eine Information muss an mehreren Stellen geändert werden. Wird eine Stelle vergessen, entstehen widersprüchliche Daten.
Beispiel: Der Kategoriename „Eingabegeräte“ muss in mehreren Zeilen angepasst werden.
Löschanomalie
Durch das Löschen eines Datensatzes gehen unbeabsichtigt weitere Informationen verloren.
Beispiel: Wird die letzte Bestellung eines Artikels gelöscht, verschwinden auch die Artikeldaten.
Ursache
Anomalien entstehen durch Redundanz und fehlerhafte Tabellenstruktur.
Ziel der Normalisierung
Durch die Aufteilung in logisch getrennte Tabellen werden Anomalien vermieden und die Datenkonsistenz verbessert.
Normalformen
Die Normalisierung erfolgt schrittweise in sogenannte Normalformen.
1. Normalform (1NF)
Bedingungen:
- Alle Attribute enthalten nur atomare (unteilbare) Werte
- Keine Wiederholungsgruppen
Beispiel (nicht 1NF):
| Kunde | Telefonnummern |
|---|---|
| Müller | 12345, 67890 |
Korrekt (1NF):
| Kunde | Telefonnummer |
|---|---|
| Müller | 12345 |
| Müller | 67890 |
2. Normalform (2NF)
Bedingungen:
- Tabelle ist in 1NF
- Jedes Nicht-Schlüsselattribut ist vollständig vom Primärschlüssel abhängig
Problem: Teilabhängigkeiten bei zusammengesetzten Schlüsseln.
Beispiel zur 2. Normalform (2NF)
Gegeben ist folgende Tabelle:
| Bestellnr | Artikelnummer | Artikelname | Menge |
|---|---|---|---|
| 1001 | A01 | Tastatur | 2 |
| 1001 | A02 | Maus | 1 |
| 1002 | A01 | Tastatur | 1 |
Primärschlüssel ist hier die Kombination aus:
- Bestellnr
- Artikelnummer
→ zusammengesetzter Primärschlüssel
Problem: Der Artikelname hängt nur von der Artikelnummer ab, nicht von der gesamten Kombination (Bestellnr + Artikelnummer).
Das ist eine Teilabhängigkeit und verletzt die 2. Normalform.
Lösung (Aufteilung in zwei Tabellen)
Tabelle: Bestellposition
| Bestellnr | Artikelnummer | Menge |
|---|---|---|
| 1001 | A01 | 2 |
| 1001 | A02 | 1 |
| 1002 | A01 | 1 |
Tabelle: Artikel
| Artikelnummer | Artikelname |
|---|---|
| A01 | Tastatur |
| A02 | Maus |
Jetzt gilt: Alle Nicht-Schlüsselattribute hängen vollständig vom jeweiligen Primärschlüssel ab.
→ Die Tabellen befinden sich in der 2. Normalform.
3. Normalform (3NF)
Bedingungen:
- Tabelle ist in 2NF
- Keine transitiven Abhängigkeiten
Das bedeutet: Ein Nicht-Schlüsselattribut darf nicht von einem anderen Nicht-Schlüsselattribut abhängen.
Beispiel (nicht 3NF):
Beispiel zur 3. Normalform (3NF)
Gegeben ist folgende Tabelle:
| Produktnr | Produktname | KategorieID | Kategoriename |
|---|---|---|---|
| 101 | Tastatur | 1 | Eingabegeräte |
| 102 | Maus | 1 | Eingabegeräte |
| 201 | Monitor | 2 | Ausgabegeräte |
Primärschlüssel:
- Produktnr
Problem: Der Kategoriename hängt nicht direkt von der Produktnr ab, sondern von der KategorieID.
Transitive Abhängigkeit:
Produktnr → KategorieID → Kategoriename
Damit liegt ein Verstoß gegen die 3. Normalform vor.
Lösung (Aufteilung in zwei Tabellen)
Tabelle: Produkt
| Produktnr | Produktname | KategorieID |
|---|---|---|
| 101 | Tastatur | 1 |
| 102 | Maus | 1 |
| 201 | Monitor | 2 |
Tabelle: Kategorie
| KategorieID | Kategoriename |
|---|---|
| 1 | Eingabegeräte |
| 2 | Ausgabegeräte |
Jetzt gilt: Alle Nicht-Schlüsselattribute hängen direkt vom jeweiligen Primärschlüssel ab.
→ Die Tabellen befinden sich in der 3. Normalform.
Durchgehendes Beispiel: 1NF → 2NF → 3NF
Ausgangstabelle (nicht normalisiert)
Problem: Mehrere Artikel stehen in einer Zelle.
| Bestellnr | Kunde | Artikel |
|---|---|---|
| 1001 | Müller | A01:Tastatur:1:Eingabegeräte, A02:Maus:2:Eingabegeräte |
| 1002 | Schmidt | A01:Tastatur:1:Eingabegeräte |
→ Wiederholungsgruppen vorhanden → Nicht in 1NF
1. Normalform (1NF)
Regel: Alle Werte sind atomar (eine Information pro Zelle).
| Bestellnr | Kunde | Artikelnr | Artikelname | KategorieID | Kategoriename | Menge |
|---|---|---|---|---|---|---|
| 1001 | Müller | A01 | Tastatur | 1 | Eingabegeräte | 1 |
| 1001 | Müller | A02 | Maus | 1 | Eingabegeräte | 2 |
| 1002 | Schmidt | A01 | Tastatur | 1 | Eingabegeräte | 1 |
Primärschlüssel:
- (Bestellnr, Artikelnr)
2. Normalform (2NF)
Problem: Teilabhängigkeit.
In der 1NF-Tabelle ist der Primärschlüssel zusammengesetzt: (Bestellnr, Artikelnr).
- Artikelname, KategorieID und Kategoriename hängen nur von Artikelnr ab.
- Kunde hängt nur von Bestellnr ab.
Beides sind Teilabhängigkeiten → 2NF verletzt.
Lösung (Aufteilung in 3 Tabellen)
Tabelle: Bestellung
| Bestellnr | Kunde |
|---|---|
| 1001 | Müller |
| 1002 | Schmidt |
Tabelle: Bestellposition
| Bestellnr | Artikelnr | Menge |
|---|---|---|
| 1001 | A01 | 1 |
| 1001 | A02 | 2 |
| 1002 | A01 | 1 |
Tabelle: Artikel
| Artikelnr | Artikelname | KategorieID | Kategoriename |
|---|---|---|---|
| A01 | Tastatur | 1 | Eingabegeräte |
| A02 | Maus | 1 | Eingabegeräte |
→ Jetzt hängen alle Nicht-Schlüsselattribute vollständig vom jeweiligen Primärschlüssel ab. → 2NF erfüllt.
3. Normalform (3NF)
Problem: Transitive Abhängigkeit.
Kategoriename hängt von KategorieID ab, nicht direkt von Artikelnr.
Artikelnr → KategorieID → Kategoriename
Lösung: Kategorie auslagern.
Tabelle: Artikel
| Artikelnr | Artikelname | KategorieID |
|---|---|---|
| A01 | Tastatur | 1 |
| A02 | Maus | 1 |
Tabelle: Kategorie
| KategorieID | Kategoriename |
|---|---|
| 1 | Eingabegeräte |
→ Keine transitive Abhängigkeit mehr → 3NF erfüllt
Kurzüberblick
- 1NF → atomare Werte
- 2NF → keine Teilabhängigkeit
- 3NF → keine transitive Abhängigkeit
Kurzmerksatz
1NF: atomar – 2NF: keine Teilabhängigkeit – 3NF: keine transitive Abhängigkeit.
Vorteile der Normalisierung
- geringerer Speicherbedarf
- bessere Datenkonsistenz
- weniger Fehler bei Änderungen
- klare Tabellenstruktur
Nachteile
- mehr Tabellen
- komplexere Abfragen (JOINs notwendig)
Kurzmerksatz
Normalisierung reduziert Redundanz und sorgt für konsistente, logisch strukturierte Datenbanktabellen.
