Eine Datenbank/Relation befindet sich dann in der dritten Normalform (3NF), wenn die zweite Normalform erfüllt ist und keine so genannten transitiven Abhängigkeiten bestehen.
Das bedeutet Folgendes: Irgendein Feld eines Datensatzes ist von einem anderen Feld abhängig, das kein Primärschlüssel ist.
Unsere Universaltabelle ist nach den Umformungen der vorigen Abschnitte bereits in der 3NF, dort kann man keine direkten Weiteroptimierungen mehr vornehmen. Zur weiteren Veranschaulichung kann man die folgenden Überlegungen heranziehen:
Wir möchten die Zuverlässigkeit unserer Lieferanten erfassen und legen dazu eine Tabelle an, die die Lieferzeiten und die Zuverlässigkeiten erfassen soll
TABLE lieferqualitaet +--+----------+----------------+--------+ |id|lieferzeit|firma |verlass | +--+----------+----------------+--------+ | 1|12h |SupiTrans |hoch | | 2|24h |SupiTrans |hoch | | 3| 8h |HyperCompoGlobal|mittel | | 4| 4h |SuperMegaNet |saumäßig| | 5|12h |SuperMegaNet |saumäßig| | 6| 8h |HyperCompoGlobal|mittel | | 7|irgendwann|Post AG |saumäßig| +--+----------+----------------+--------+
Hier gibt es eine transitive Abhängigkeit zwischen dem Nichtschlüsselattribut firma
und dem Attribut verlass
: Wenn man weiss, wer der Lieferant ist, kann man auch direkt sagen, wie verlässlich dieser ist. Man muss also nicht bei jedem Datensatz mit der Lieferfirma SupiTrans dazuschreien, dass die Verlässlichkeit "hoch" ist, sondern man könnte ebensogut (und speicherplatzsparender) auf eine weitere Entität/Tabelle verweisen, in der die Verlässlichkeiten gespeichert sind - das stellt eine redundante Datenspeicherung dar, die man mit Hilfe einer weiteren Tabelle eliminieren kann.
TABLE: verlass +--+--------+ |id|verlass | +--+--------+ | 1|hoch | | 2|mittel | | 3|saumäßig| +--+--------+ TABLE lieferqualitaet +--+----------+----------------+--------+ |id|lieferzeit|firma |verlass | +--+----------+----------------+--------+ | 1|12h |SupiTrans |1 | | 2|24h |SupiTrans |1 | | 3| 8h |HyperCompoGlobal|2 | | 4| 4h |SuperMegaNet |3 | | 5|16h |SuperMegaNet |3 | | 6| 9h |HyperCompoGlobal|2 | | 7|irgendwann|Post AG |3 | +--+----------+----------------+--------+
Man kann auch die Lieferzeiten noch in eine weitere Tabelle auslagern - wie könnte man hier vorgehen? Wie sieht die Tabelle lieferqualitaet
anschliessend aus?
Kann man in der Tabelle lieferqualitaet
die mehrfach auftretenden Herstellernamen ebenfalls durch eine Verbindung auf einen anderen Entitätstyp eliminieren? Wie sieht die Tabelle dann aus?
Ein solche Tabelle nennt man Beziehungtabelle - erläutere, warum dieser Name sehr sinnvoll ist.