2. Normalform (2NF)

Ein Relationstyp (Tabelle) befindet sich in der zweiten Normalform (2NF), wenn die erste Normalform erfüllt ist und für jeden Primärschlüssel eindeutige Attributwerte vorhanden sind.

Die 2. Normalform entfernt Redundanzen:

In der Tabelle in der 1NF tauchen zahlreiche Attributwerte mehrfach auf, z.B. Die Namen der Doktoren oder Hersteller.

Grundsatz: Eine Entität - eine Tabelle

Wenn man den Grundsatz – den unser Sekretär mit seinem an die Tabellenkalkulation angelehnten Vorgehen bereits verletzt hat, den wir aber eigentlich kennen – befolgt: Jede Entität bekommt ihre eigene Relation, die Attribute sind die Tabellenspalten1) und die Attribute entsprechend der Miniwelt atomar wählt erhält man relativ direkt die 2NF.

Hier sieht man nochmal, dass die Normalisierung beim Design der Datenbank stattfinden sollte, nicht wie wir das hier machen, nachdem man bereits ein schlechtes Design implementiert hat.


(A1)

Lösungshinweise Tabellenstrukturen:

SQL Befehle:

Ergebnis:


(A2)

Was bei der Normalisierung nun dummerweise verloren gegangen ist, ist die Zuordnung der Bestellungen zu unseren Kunden, den Doktoren - deswegen hatte der Sekretär die Tabelle ja mal angelegt. Auch die Verbindung zwischen Herstellern und Prodkukten sucht man in den einzelnen Tabellen vergeblich?!

Um die Verknüpfung zwischen den Entitäten nun wieder herzustellen, wird eine weitere Tabelle angelegt, die lediglich die Verknüpfung zwischen den anderen Entitäten herstellt.

Erstelle eine Tabelle bestellungen mit den Feldern id (Primary-Key, Auto-Increment), produkt_id, doktor_id, hersteller_id und anzahl.

Nun schauen wir in unserer Universaltabelle nach den Bestellungen:

Die dritte Zeile sagt uns, dass Viktoria Einsenfaust drei Kneifzangen bestellt hat.

Um das in unserer bestellungen-Tabelle abzubilden, müssen wir folgendes eintragen:

 | id | anzahl | produkt_id | doktor_id | hersteller_id |
 | 1  | 3      | 3          | 3         | 3             |

(i) Was muss man für die Bestellung in der letzten Zeile der Universaltabelle eintragen?

Lösung

(ii) Komplettiere die Bestellungstabelle in deiner Übungsdatenbank und führe dann die folgende Abfrage aus:

SELECT * FROM hersteller,doktoren, produkte, bestellungen 
WHERE bestellungen.produkt_id = produkte.id
AND bestellungen.doktor_id = doktoren.id
AND bestellungen.hersteller_id = hersteller.id

Erläutere, was bei dieser Abfrage passiert und interpretiere das Ergebnis.


Nun befinden sich alle Relationen unserer Datenbank in der 2. Normalform2).

Die normalisierte Datenbank: zahnarztbedarf_2nf.zip

1)
Erinnerung: Relation ist nur ein anderer Name für Tabelle…
2)
In unserem speziellen Fall sogar zufällig bereits in der 3.