Q2 Datenbanken

Normalisierung: 1., 2. und 3. Normalform

Lösung geprüft

Die Aufgabe der heutigen Stunde ist die Normalisierung! Neun Teilaufgaben zu den ersten drei Normalformen. Das ist das Thema, bei dem es am meisten Punkte in der Klausur gibt und bei dem sich am meisten Leute unnötig schwertun – dabei steckt hinter allen drei Normalformen dieselbe Idee: jede Information soll genau einmal gespeichert werden, und zwar dort, wo sie hingehört.

Die Aufgabenstellung lautet

1 Erklären Sie in eigenen Worten: Was bedeutet „1. Normalform"?
2 Gegeben sei eine Relation mit KundenNr und Kunde. a) Beschreiben Sie, wo die Nachteile dieser Struktur liegen. b) Bringen Sie die Relation in die 1. Normalform.
3 Wie viele Attribute wird die Relation „Artikel" insgesamt haben, wenn Sie diese in die 1NF bringen?
4 Erklären Sie in eigenen Worten: Was bedeutet „2. Normalform"?
5 Relation „LCD_Flachbildschirme": a) Identifizieren Sie den Primärschlüssel. b) Befindet sich die Relation in der 2NF? Wenn nein: Bringen Sie die Relation in die 2NF.
6 Dasselbe für die Relation „Lexikoneintraege".
7 Erklären Sie in eigenen Worten: Was bedeutet „3. Normalform"?
8 Relation „Lagerbestand": a) Primärschlüssel identifizieren. b) Bestehen transitive Abhängigkeiten? Wenn ja: Beseitigen Sie diese und stellen Sie die 3NF her.
9 Dasselbe für die Relation „Verliehene Bücher".

Aufgabe 1 – Die 1. Normalform

Eine Relation ist in der 1. Normalform, wenn jedes Attribut atomar ist – also unteilbar. In jeder Zelle steht genau ein Wert, keine Liste, keine Aufzählung, kein zusammengesetzter Text.

Verstößt gegen 1NFWarum
"Josef Schmitt, Blochweg 3, 79312 Emmendingen"Name, Straße, PLZ und Ort in einem Feld
"Mathe, Info, Sport"eine Liste in einer Zelle
Spalten Fach1, Fach2, Fach3Wiederholungsgruppe – was macht man beim vierten Fach?

Aufgabe 2 – Die Kundenrelation

KundenNr  Kunde
1         Josef Schmitt, Blochweg 3, 79312 Emmendingen
2         Ann Woll, Hauptstraße 15, 79312 Emmendingen

a) Die Nachteile

b) In der 1. Normalform

Kunden(KundenNr, Vorname, Nachname, Strasse, Hausnummer, PLZ, Ort)
       ^^^^^^^^
       PK

1  Josef  Schmitt  Blochweg      3   79312  Emmendingen
2  Ann    Woll     Hauptstraße  15   79312  Emmendingen

Hausnummer und Straße trennt man, weil man sonst nicht nach Straße sortieren kann. Und die Hausnummer bleibt VARCHAR und wird kein INT – es gibt „3a" und „15-17".

Aufgabe 3 – Wie viele Attribute?

Aus den beiden Datensätzen liest man alle Einzelinformationen heraus, die irgendwo vorkommen:

#AttributLuftmatratzeMichael Kohlhaas
1Artikelnummer12
2ArtikelnameLuftmatratzeMichael Kohlhaas
3Gewicht_kg30,25
4Garantie_Jahre2NULL
5Preis_Euro31,706,90
6MwSt_Prozent197
7SeitenzahlNULL250

Antwort: 7 Attribute.

Der interessante Teil ist das, was dabei auffällt: zwei Zellen bleiben leer. Ein Buch hat keine Garantie, eine Luftmatratze keine Seitenzahl. Die Relation ist damit zwar in der 1NF, aber der Entwurf ist trotzdem nicht gut – bei zwanzig verschiedenen Artikelarten hätte man dreißig Spalten, von denen pro Zeile fünf gefüllt sind.

Richtig löst man das später mit getrennten Tabellen für Bücher und Sportartikel oder mit einer Attribut-Wert-Tabelle. Das gehört nicht mehr zur 1NF, ist aber eine gute Beobachtung für die Antwort.

Aufgabe 4 – Die 2. Normalform

Eine Relation ist in der 2. Normalform, wenn sie in der 1NF ist und jedes Nicht-Schlüssel-Attribut vom gesamten Primärschlüssel abhängt – nicht nur von einem Teil davon.

Der wichtigste Satz dazu: Bei einem einfachen Primärschlüssel ist die 2NF automatisch erfüllt. Es gibt dann gar keinen „Teil" des Schlüssels, von dem etwas abhängen könnte. Die 2NF ist also nur bei zusammengesetzten Schlüsseln überhaupt ein Thema.

Aufgabe 5 – LCD_Flachbildschirme

Hersteller  Seriennummer  TypBez            Preis
Sony        123456789     Blinkmaster 3C    199.00
Samsug      138829919     Summerspecial I   189.00
Sony        188549921     Blinkmaster 3C    199.00
Sony        139929191     110C              219.00

a) Der Primärschlüssel

(Hersteller, Seriennummer) – zusammengesetzt.

Seriennummern sind nur innerhalb eines Herstellers eindeutig. Sony und Samsung könnten problemlos beide eine 123456789 vergeben. Nimmt man dagegen an, dass die Seriennummern weltweit eindeutig sind, reicht Seriennummer allein – dann wäre die Relation automatisch in der 2NF und die Aufgabe hätte keine Pointe. Deshalb ist der zusammengesetzte Schlüssel gemeint.

b) In der 2NF? Nein.

TypBez und Preis hängen nur von der Seriennummer ab, nicht vom Hersteller. Das ist eine partielle Abhängigkeit und verletzt die 2NF.

Geraete(Seriennummer, Hersteller, TypBez)
        PK

Typen(TypBez, Preis)
      PK

Nebenbei ist damit auch gleich ein zweites Problem weg: der Preis stand bei „Blinkmaster 3C" zweimal mit 199.00 in der Tabelle. Ändert sich der Preis, hätte man ihn an zwei Stellen ändern müssen – und eine vergessen. Jetzt steht er genau einmal da.

Streng genommen ist die Abhängigkeit Preis → TypBez eine transitive und gehört damit zur 3NF. In der Praxis räumt man beides in einem Schritt auf. Wenn du das in der Antwort erwähnst, ist das ein Pluspunkt.

Aufgabe 6 – Lexikoneintraege

Buch_ID  Seite  Artikelname  Lexikontitel
1        137    Windkraft    Brockhaus
1         85    Goethe       Brockhaus
2        137    Goethe       Meyer
2        289    Wasserwerk   Meyer
2        289    Windkraft    Meyer

a) Der Primärschlüssel

(Buch_ID, Seite, Artikelname)

Alle drei werden gebraucht. Buch_ID und Seite reichen nicht: die Kombination (2, 289) kommt zweimal vor, weil auf Seite 289 zwei Artikel anfangen. Erst der Artikelname macht die Zeile eindeutig.

b) In der 2NF? Nein.

Lexikontitel hängt nur von Buch_ID ab – also von einem Teil des Schlüssels. Wieder eine partielle Abhängigkeit.

Lexika(Buch_ID, Lexikontitel)
       PK

Eintraege(Buch_ID, Seite, Artikelname)
          PK       PK     PK
          FK -> Lexika.Buch_ID

Man sieht den Gewinn direkt: „Brockhaus" stand zweimal da, „Meyer" dreimal. Jetzt steht jeder Lexikontitel genau einmal.

Aufgabe 7 – Die 3. Normalform

Eine Relation ist in der 3. Normalform, wenn sie in der 2NF ist und kein Nicht-Schlüssel-Attribut transitiv vom Primärschlüssel abhängt.

Transitiv heißt: über einen Umweg. Kurz gesagt – kein Nicht-Schlüssel-Attribut darf von einem anderen Nicht-Schlüssel-Attribut abhängen.

Schluessel  ->  Attribut A  ->  Attribut B

Das ist eine transitive Abhaengigkeit: B haengt eigentlich an A,
nicht am Schluessel. Also gehoert B zusammen mit A in eine eigene Tabelle.

Der Merkspruch, mit dem man sich alle drei Normalformen merken kann: Jedes Attribut hängt vom Schlüssel ab, vom ganzen Schlüssel und von nichts als dem Schlüssel. Der erste Teil ist die 1NF, der zweite die 2NF, der dritte die 3NF.

Aufgabe 8 – Lagerbestand

ID  Artikel    Anzahl  Lieferant    Lieferant_Ort
1   Locher     2       Herlitz      Wiesbaden
2   Tacker     13      Bürohaus M   München
3   Klebstoff  3       Herlitz      Wiesbaden
4   Ordner     6       Leitz        Hamburg

a) Der Primärschlüssel

ID – einfach, also ist die 2NF automatisch erfüllt.

b) Transitive Abhängigkeiten? Ja.

Lieferant_Ort hängt von Lieferant ab und nicht von der ID. Man sieht es direkt an den Daten: Herlitz steht zweimal drin, und beide Male steht „Wiesbaden" daneben. Das ist kein Zufall, sondern eine Abhängigkeit.

Lagerbestand(ID, Artikel, Anzahl, Lieferant_ID)
             PK                   FK -> Lieferanten.ID

Lieferanten(ID, Name, Ort)
            PK

Was man damit verhindert, heißt Änderungsanomalie: zieht Herlitz nach Mainz um, müsste man vorher jede Zeile mit Herlitz anfassen. Vergisst man eine, steht der Lieferant in derselben Datenbank an zwei Orten gleichzeitig.

Aufgabe 9 – Verliehene Bücher

ID  Titel         LeiherName  Seitenzahl  Regal-Nr.
1   Robinson      Martina     189         1
2   Faust         Josef       113         5
3   USA-Reisen    Josef       288         7
4   Helmut Kohl   Rico         95         7

a) Der Primärschlüssel

ID

b) Transitive Abhängigkeiten? Ja.

Seitenzahl und Regal-Nr. hängen vom Buch ab, nicht vom Ausleihvorgang. Die Seitenzahl von „Faust" ändert sich nicht dadurch, dass jemand anderes es ausleiht.

Buecher(Buch_ID, Titel, Seitenzahl, Regal_Nr)
        PK

Ausleihen(ID, Buch_ID, LeiherName)
          PK  FK -> Buecher.Buch_ID

Der Denkfehler, den man hier leicht macht: die Tabelle heißt „Verliehene Bücher", also denkt man, es ginge um Bücher. Tatsächlich ist jede Zeile ein Ausleihvorgang. Deshalb gehört alles, was zum Buch selbst gehört, in eine eigene Tabelle.

Man könnte noch einen Schritt weitergehen und die Leiher auslagern – „Josef" steht zweimal da. Gefordert war das nicht, weil LeiherName tatsächlich direkt vom Ausleihvorgang abhängt und damit keine transitive Abhängigkeit vorliegt. Für eine echte Datenbank wäre eine Tabelle Leiher trotzdem sinnvoll, schon wegen der Tippfehler.

Das Verfahren, das immer funktioniert

  1. 1NF: Gibt es Zellen mit mehreren Werten drin? Aufteilen.
  2. Primärschlüssel bestimmen. Ist er einfach, überspring Schritt 3.
  3. 2NF: Hängt ein Attribut nur von einem Teil des Schlüssels ab? Mit diesem Teil in eine eigene Tabelle.
  4. 3NF: Hängt ein Attribut von einem anderen Nicht-Schlüssel-Attribut ab? Beide zusammen in eine eigene Tabelle.
  5. Fremdschlüssel setzen, damit die Tabellen wieder verbunden sind.
flowchart TD
    A["Die Relation, so wie sie gegeben ist"]
    B{"Steht in einer Zelle<br>mehr als ein Wert?"}
    B1["1NF: den Text in einzelne Spalten zerlegen<br>Aufgabe 2: Kunde wird zu Vorname, Nachname,<br>Strasse, Hausnummer, PLZ, Ort"]
    C{"Primärschlüssel bestimmen:<br>einfach oder zusammengesetzt?"}
    D{"Hängt ein Attribut nur von<br>einem Teil des Schlüssels ab?"}
    D1["2NF: Teilschlüssel und die abhängigen<br>Attribute in eine eigene Tabelle<br>Aufgabe 6: Lexikontitel wird zu Lexika"]
    E{"Hängt ein Nicht-Schlüssel-Attribut<br>von einem anderen ab?"}
    E1["3NF: beide zusammen in eine<br>eigene Tabelle<br>Aufgabe 8: Lieferant_Ort wird zu Lieferanten"]
    F["Fremdschlüssel setzen - fertig"]

    A --> B
    B -- ja --> B1
    B1 --> C
    B -- nein --> C
    C -- "einfach: 2NF ist automatisch erfüllt" --> E
    C -- zusammengesetzt --> D
    D -- ja --> D1
    D1 --> E
    D -- nein --> E
    E -- ja --> E1
    E1 --> F
    E -- nein --> F
Was in welchem Schritt herausgezogen wird

Der schnellste Test in der Klausur: schau, welcher Wert in der Tabelle doppelt vorkommt. Steht „Herlitz – Wiesbaden" zweimal identisch da, ist das fast immer eine Abhängigkeit, die ausgelagert gehört. Redundanz ist der sichtbare Fingerabdruck einer verletzten Normalform.

Aufgabe suchen

Tippe los. Strg+K öffnet die Suche von überall.

Zuletzt angesehen

Werbung