Datenbanken sind allgegenwärtig und in vielfältiger Weise werden auch für kleinere Anwendungen Daten aus bestehenden Datenbanken verwendet oder auf die Schnelle neue gezimmert. Allerdings lohnt es sich, gerade der Datenmodellierung besondere Aufmerksamkeit zu schenken. Anwendungen sind von Daten abhängig, Daten allerdings nicht von der Anwendung. Ungünstig oder schlichtweg falsch modellierte Datenstrukturen erzwingen fehlerhafte oder wenigstens fehlerträchtige Algorithmen. Gute und gelunge Modellierungsansätze dagegen lassen sich erweitern, bieten auch auf Anwendungsebene elegante Verarbeitungsmöglichkeiten, auf die man nicht verzichten sollte. Dieser Artikel beschreibt beispielhaft den Weg der Normalisierung, der für das relationale Datenmodell von entscheidender Bedeutung ist.
Auf dem Weg von der real existierenden Plattensammlung bis hin zu einem funktionsfähigen relationalen Datenmodell wurden am Rande bereits einige Normalisierungsvorgänge unternommen. Sie standen allerdings bewusst unter dem Blickwinkel der Übertragung von einem semantischen Modell zu den notwendigen Tabellen, die dann die DB konstituieren. In dieser Lektion wird dieser Prozess noch einmal durchlaufen, wobei als neue Perspektive dieses Mal der Algorithmus der Normalisierung dient.
Die in diesem Algorithmus ablaufenden Regeln und die ihn begründenden Gesetze haben folgende Ziele:
Folgendes Anti-Beispiel erfüllt kein einziges der der oben genannten Merkmale, sodass es mit den folgenden Abschnitten als durchgehendes Beispiel schrittweise in ein geeignetes Datenmodell überführt werden kann. In einer Firma, die sich mit Seminaren und der Lösung von E-Commerce-Problemen beschäftigt, sind verschiedene Mitarbeiter abteilungsübergreifend in Projekten eingesetzt. Jeder Mitarbeiter hat eine Personalnummer (PersNr), einen Namen (Name) und ein Einstiegsjahr (Jahr). Die Mitarbeiter arbeiten in Abteilungen, die eine Abteilungsnummer (AbtNr), einen Abteilungsnamen (AbtName), eine Mitarbeiterzahl (MaZahl) und einen Abteilungsleiter (AbtLeit) besitzen. Die Projekte haben verschiedene Nummern (ProjNr) und einen Projektleiter (LeitNr). Die Mitarbeiter beschäftigen sich unterschiedlich intensiv (Zeit) mit den aktuellen Projekten.
| PersNr | ProjNr | LeitNr | Zeit | Name | Jahr | AbtNr | AbtName | MaZahl | AbtLeit |
|---|---|---|---|---|---|---|---|---|---|
| 1020 | C13 | 1020 | 15% | Ralf Tauzieh | 1995 | 2 | Medien | 4 | 1020 |
| 1020 | B12 | 1042 | 30% | Ralf Tauzieh | 1992 | 2 | Medien | 4 | 1020 |
| 1035 | C13 | 1020 | 50% | Jana Grün | 2001 | 3 | FiBu | 2 | 1035 |
| 1042 | B12 | 1042 | 25% | Tom Schnell | 1993 | 1 | Seminare | 3 | 1042 |
| 1042 | D10 | 1049 | 30% | Tom Schnell | 1990 | 1 | Seminare | 3 | 1042 |
| 1048 | D10 | 1049 | 15% | Fritz Bachler | 1999 | 4 | Programmierung | 5 | 1048 |
| 1049 | C13 | 1020 | 40% | Tanja Sieben | 1996 | 4 | Programmierung | 5 | 1048 |
Zwischen Daten können unterschiedliche Abhängigkeiten bestehen. Mit ihrer Hilfe können Daten in eine vernünftige relationale Form gebracht werden, wenn man die Daten entsprechend analysiert.
Im nebenstehenden Beispiel werden Schiffe und Kabinen erfasst. Typischerweise werden Kabinen auf Schiffen oder Zimmer in Hotels nicht mit einem komplizierten Code gezählt, sondern einfach in Ganzzahlen von 1 bis zu einer bestimmten anderen Zahl. Innerhalb eines Schiffs reicht es vollkommen aus, seine eigene Kabinennummer zu kennen, um seine Kabine wiederzufinden bzw. zumindest einen Steward zu bitten, den Weg zu der so eindeutig identifizierten Kabine zu beschreiben.
Diese Kabinennummer ist aber nicht ausreichend, um andererseits im Reisebüro für die nächste große Weltreise die gleiche Kabine zu buchen. Nicht einmal innerhalb der gleichen Flotte wird eine Nummer wie 112 aushelfen können. Vielmehr ist dieser Primärschlüssel abhängig von der Schiffnummer, die als weiteres Kriterium die einzelne Kabine einem bestimmten Schiff zuordnet. Damit gehört das Objekt KABINE zu den schwachen Einheiten, da ihre eindeutige Bestimmung von einem weiterem Objekt abhängt.
Für die funktionale Abhängigkeit gilt, dass zwei Attribute eines Objekts dann funktional voneinander abhängen, wenn zu jedem Wert von A nur ein Wert von B gehört. In obiger Tabelle besteht also bspw. eine solche Abhängigkeit zwischen PersNr und Name, da über die Personalnummer (1020) sofort auf den zugehörigen Namen (Ralf Tauzieh) geschlossen werden kann.
In diesem Fall sagt man, dass der Name funktional abhängig ist von der Personalnummer. Wenn Sie mit so häufigen Namen wie Ralf Müller oder Ralf Schmidt den gleichen Test machen, könnte es sein, dass auch noch ein Anderer im Betrieb den gleichen Namen hat und deswegen die Personalnummer nicht vom Namen abhängt.
| PersNr | Name | Jahr |
|---|---|---|
| 1020 | Ralf Tauzieh | 1995 |
| 1035 | Jana Grün | 2001 |
| 1042 | Tom Schnell | 1990 |
| 1048 | Fritz Bachler | 1999 |
| 1049 | Tanja Sieben | 1996 |
| PersNr | Vorname | Name |
|---|---|---|
| 1020 | Ralf | Tauzieh |
| 1035 | Jana | Grün |
| 1042 | Tom | Schnell |
| 1048 | Fritz | Bachler |
| 1049 | Tanja | Sieben |
| PersNr | Vorname | Name |
|---|---|---|
| 1020 | Ralf | Tauzieh |
| 1035 | Jana | Grün |
| 1042 | Tom | Schnell |
| 1048 | Fritz | Bachler |
| 1049 | Tanja | Sieben |
| PersNr | ProjNr | LeitNr | Zeit | AbtNr | AbtName | MaZahl | AbtLeit |
|---|---|---|---|---|---|---|---|
| 1020 | C13 | 1020 | 15% | 2 | Medien | 4 | 1020 |
| 1020 | B12 | 1042 | 30% | 2 | Medien | 4 | 1020 |
| 1035 | C13 | 1020 | 50% | 3 | FiBu | 2 | 1035 |
| 1042 | B12 | 1042 | 25% | 1 | Seminare | 3 | 1042 |
| 1042 | D10 | 1049 | 30% | 1 | Seminare | 3 | 1042 |
| 1048 | D10 | 1049 | 15% | 4 | Programmierung | 5 | 1048 |
| 1049 | C13 | 1020 | 40% | 4 | Programmierung | 5 | 1048 |

| Tabelle | Spalten |
|---|---|
| PROJEKTE | PersNr, Name, Jahr, AbtNr, AbtName, MaZahl, AbtLeit |
| ZEITEN | PersNr, ProjNr, Zeit |
| PROJEKTLEITER | ProjNr, LeitNr |
| PersNr | Zeit | Vorname | Name | Jahr | AbtNr | AbtName | MaZahl | AbtLeit |
|---|---|---|---|---|---|---|---|---|
| 1020 | 15% | Ralf | Tauzieh | 1995 | 2 | Medien | 4 | 1020 |
| 1020 | 30% | Ralf | Tauzieh | 1992 | 2 | Medien | 4 | 1020 |
| 1035 | 50% | Jana | Grün | 2001 | 3 | FiBu | 2 | 1035 |
| 1042 | 25% | Tom | Schnell | 1993 | 1 | Seminare | 3 | 1042 |
| 1042 | 30% | Tom | Schnell | 1990 | 1 | Seminare | 3 | 1042 |
| 1048 | 15% | Fritz | Bachler | 1999 | 4 | Programmierung | 5 | 1048 |
| 1049 | 40% | Tanja | Sieben | 1996 | 4 | Programmierung | 5 | 1048 |
| ProjNr | LeitNr |
|---|---|
| C13 | 1020 |
| B12 | 1042 |
| B12 | 1042 |
| D10 | 1049 |
| PersNr | ProjNr | Zeit |
|---|---|---|
| 1020 | C13 | 15% |
| 1020 | B12 | 30% |
| 1035 | C13 | 50% |
| 1042 | B12 | 25% |
| 1042 | D10 | 30% |
| 1048 | D10 | 15% |
| 1049 | C13 | 40% |

| Tabelle | Spalten |
|---|---|
| MITARBEITER | PersNr, Vorname, Name, Jahr, AbtNr |
| ABTEILUNGEN | AbtNr, AbtName, AbtLeiter, MaZahl |
| PROJEKTE | ProjNr, LeitNr |
| ZEITEN | PersNr, ProjNr, Zeit |
| Tabelle PROJEKTE | Tabelle ZEITEN | ||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||
| Tabelle MITARBEITER | Tabelle ABTEILUNGEN | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
Mögliche Schwierigkeiten mit ungünstig bzw. sogar falsch strukturierten Datenmodellen schimmerten bereits im Laufe der Überlegungen zur Normalisierung der oben verwendeten DB hindurch. Abschließend sollen die wichtigsten Probleme noch einmal am oberen Beispiel erläutert und zusammengefasst werden. Es bietet sich an, diese Ausführungen nach der erledigten Normalisierungsarbeit zu geben, weil Sie die hergeleitete Datenstruktur jetzt kennen und daher sicherlich die einzelnen Punkte besser zu deuten wissen:
comelio.com
