Normalisierung: Unterschied zwischen den Versionen

Aus FI-Wiki
Zeile 174: Zeile 174:


== Durchgehendes Beispiel: 1NF → 2NF → 3NF ==
== Durchgehendes Beispiel: 1NF → 2NF → 3NF ==
In diesem Beispiel wird eine unstrukturierte Tabelle schrittweise normalisiert.


=== Ausgangstabelle (nicht normalisiert) ===
=== Ausgangstabelle (nicht normalisiert) ===
Problem: Mehrere Artikel stehen in einer Zelle (Wiederholungsgruppe).
Problem: Mehrere Artikel stehen in einer Zelle.


{| class="wikitable" style="width:100%;"
{| class="wikitable"
! Bestellnr !! Kunde !! Artikel (Nr:Name:Menge)
! Bestellnr !! Kunde !! Artikel
|-
|-
| 1001 || Müller || A01:Tastatur:2, A02:Maus:1
| 1001 || Müller || A01:Tastatur:1:Eingabegeräte, A02:Maus:2:Eingabegeräte
|-
|-
| 1002 || Schmidt || A01:Tastatur:1
| 1002 || Schmidt || A01:Tastatur:1:Eingabegeräte
|}
|}


=== Schritt 1: 1. Normalform (1NF) ===
→ Wiederholungsgruppen vorhanden 
Regel: Alle Werte müssen '''atomar''' sein (eine Information pro Zelle).
→ Nicht in 1NF
 
---
 
=== 1. Normalform (1NF) ===
Regel: Alle Werte sind atomar (eine Information pro Zelle).


{| class="wikitable" style="width:100%;"
{| class="wikitable"
! Bestellnr !! Kunde !! Artikelnr !! Artikelname !! Menge
! Bestellnr !! Kunde !! Artikelnr !! Artikelname !! KategorieID !! Kategoriename !! Menge
|-
|-
| 1001 || Müller || A01 || Tastatur || 2
| 1001 || Müller || A01 || Tastatur || 1 || Eingabegeräte || 1
|-
|-
| 1001 || Müller || A02 || Maus || 1
| 1001 || Müller || A02 || Maus || 1 || Eingabegeräte || 2
|-
|-
| 1002 || Schmidt || A01 || Tastatur || 1
| 1002 || Schmidt || A01 || Tastatur || 1 || Eingabegeräte || 1
|}
|}


=== Schritt 2: 2. Normalform (2NF) ===
Primärschlüssel:
Voraussetzung: 1NF ist erfüllt. 
* (Bestellnr, Artikelnr)
Problem: zusammengesetzter Schlüssel (Bestellnr + Artikelnr). 
 
'''Teilabhängigkeit:''' Artikelname hängt nur von Artikelnr ab, nicht von der ganzen Kombination.
---
 
=== 2. Normalform (2NF) ===
Problem: Teilabhängigkeit.


Primärschlüssel in der 1NF-Tabelle:
Artikelname, KategorieID und Kategoriename hängen nur von Artikelnr ab, 
* (Bestellnr, Artikelnr)
nicht vom gesamten zusammengesetzten Schlüssel.


Lösung: Auslagern der Artikeldaten.
Lösung: Auslagern der Artikeldaten.


'''Tabelle: Bestellposition''' (2NF)
'''Tabelle: Bestellposition'''


{| class="wikitable" style="width:100%;"
{| class="wikitable"
! Bestellnr !! Artikelnr !! Menge
! Bestellnr !! Artikelnr !! Menge
|-
|-
| 1001 || A01 || 2
| 1001 || A01 || 1
|-
|-
| 1001 || A02 || 1
| 1001 || A02 || 2
|-
|-
| 1002 || A01 || 1
| 1002 || A01 || 1
|}
|}


'''Tabelle: Artikel''' (2NF)
'''Tabelle: Artikel'''


{| class="wikitable" style="width:100%;"
{| class="wikitable"
! Artikelnr !! Artikelname !! KategorieID !! Kategoriename
! Artikelnr !! Artikelname !! KategorieID !! Kategoriename
|-
|-
Zeile 233: Zeile 239:
|}
|}


=== Schritt 3: 3. Normalform (3NF) ===
→ Jetzt keine Teilabhängigkeit mehr 
Voraussetzung: 2NF ist erfüllt.
→ 2NF erfüllt
Problem: '''transitive Abhängigkeit''' in der Artikel-Tabelle: 
 
Kategoriename hängt von KategorieID ab, nicht direkt von Artikelnr.
---
 
=== 3. Normalform (3NF) ===
Problem: Transitive Abhängigkeit.
 
Kategoriename hängt von KategorieID ab,
nicht direkt von Artikelnr.


Artikelnr → KategorieID → Kategoriename
Artikelnr → KategorieID → Kategoriename


Lösung: Auslagern der Kategorie.
Lösung: Kategorie auslagern.


'''Tabelle: Artikel''' (3NF)
'''Tabelle: Artikel'''


{| class="wikitable" style="width:100%;"
{| class="wikitable"
! Artikelnr !! Artikelname !! KategorieID
! Artikelnr !! Artikelname !! KategorieID
|-
|-
Zeile 252: Zeile 264:
|}
|}


'''Tabelle: Kategorie''' (3NF)
'''Tabelle: Kategorie'''


{| class="wikitable" style="width:100%;"
{| class="wikitable"
! KategorieID !! Kategoriename
! KategorieID !! Kategoriename
|-
|-
Zeile 260: Zeile 272:
|}
|}


=== Ergebnis ===
→ Keine transitive Abhängigkeit mehr 
* 1NF: keine Listen in Zellen (atomare Werte)
→ 3NF erfüllt
* 2NF: keine Teilabhängigkeiten bei zusammengesetzten Schlüsseln
 
* 3NF: keine transitiven Abhängigkeiten
---
 
== Kurzüberblick ==
* 1NF atomare Werte
* 2NF keine Teilabhängigkeit
* 3NF keine transitive Abhängigkeit


== Kurzmerksatz ==
== Kurzmerksatz ==

Version vom 23. Februar 2026, 10:42 Uhr

Normalisierung ist ein Verfahren zur Strukturierung von Datenbanktabellen. Ziel ist es, Redundanzen zu vermeiden und Datenkonsistenz sicherzustellen.

Die Normalisierung wird hauptsächlich bei relationalen Datenbanken angewendet.

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.

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.

Artikelname, KategorieID und Kategoriename hängen nur von Artikelnr ab, nicht vom gesamten zusammengesetzten Schlüssel.

Lösung: Auslagern der Artikeldaten.

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 keine Teilabhängigkeit mehr → 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.