Für die folgenden Schritte wird in den folgenden Kapiteln die Theorie nachgeliefert. Für das Verständnis gehen wir anhand von einem Beispiel die notwenigen und sinnvollen Schritte durch.
Lassen Sie uns an einem Beispiel die Vorgehensweisen und die Fallstricke zeigen. Wir wollen als erstes eine einfache Adressverwaltung erstellen. Wir wollen folgende Informationen speichern:
Eine Datenbank kann man sich als Tabelle vorstellen. Unsere obigen Daten würden dann so aussehen (alle Namen und Daten sind rein fiktiv und Ähnlichkeiten … )
| name | anrede | strasse | plzundort | telefon | leseausweisnr |
|---|---|---|---|---|---|
| Fritz Müller | Herr | Hauptstr. 12 | 72070 Tübingen | 07071-555-12312 | 1289234877 |
| Susi Simmer | Frau | Herbstallee 1 | 72074 Tübingen | 07071-555-654654 | |
| Susi Sommer | Frau | 72074 Tübingen | 07071-555-64444 | 984613325 |
Die Spalten der Tabelle sind die Datenfelder (bzw. Attribute)
Die Reihen sind jeweils ein Datensatz
Wichtig ist, dass jedes Feld nur eine Information enthält. In unserem Beispiel bedeutet dies, dass die Felder Namen und PLZ mit Ort von Übel sind. Diese werden also getrennt.
| name | anrede | strasse | plzundort | telefon | leseausweisnr |
|---|---|---|---|---|---|
| Fritz Müller | Herr | Hauptstr. 12 | 72070 Tübingen | 07071-555-12312 | 1289234877 |
| Susi Simmer | Frau | Herbstallee 1 | 72074 Tübingen | 07071-555-654654 | |
| Susi Sommer | Frau | 72074 Tübingen | 07071-555-64444 | 984613325 |
Nach der Trennung sieht die Tabelle wie folgt aus. Für die Namen der Spalten sollten sprechende Namen und ohne Umlaute und ohne Sonderzeichen gewählt werden!
| nachname | vorname | anrede | strasse | plz | ort | telefon | leseausweisnr |
|---|---|---|---|---|---|---|---|
| Müller | Fritz | Herr | Hauptstr. 12 | 72070 | Tübingen | 07071-555-12312 | 1289234877 |
| Simmer | Susi | Frau | Herbstallee 1 | 72074 | Tübingen | 07071-555-654654 | |
| Sommer | Susi | Frau | 72074 | Tübingen | 07071-555-64444 | 984613325 |
Um bei der Tabelle mit den Adressen einen eindeutigen Zugriff zu bekommen, wird diese erweitert. Da bei Adressen der Nachname öfters vorkommen kann, geht man den Weg, ein weiteres Feld hinzuzufügen, das es pro Datensatz nur einmal geben kann. Dieses wird gerne ID genannt – abgekürzt von IDentifier. Diese bekommen eine fortlaufende Nummern (es darf keine Nummer bereits verwendet worden sein!)
| id | nachname | vorname | anrede | strasse | plz | ort | telefon | leseausweisnr |
|---|---|---|---|---|---|---|---|---|
| 1 | Müller | Fritz | Herr | Hauptstr. 12 | 72070 | Tübingen | 07071-555-12312 | 1289234877 |
| 2 | Simmer | Susi | Frau | Herbstallee 1 | 72074 | Tübingen | 07071-555-654654 | |
| 3 | Sommer | Susi | Frau | 72074 | Tübingen | 07071-555-64444 | 984613325 |
Diese eindeutige Feld wird Schlüssel genannt – es ist das Schlüsselfeld, über das jeder Datensatz eindeutig angesprochen werden kann. Dazu werden in der realen Welt dann in Vereinen Mitgliedsnummern vergeben, oder Sozialversicherungsnummern, oder im Ausweis die Ausweisnummer. Der Schlüssel zur absolut eindeutigen Identifizierung. Siehe hierzu später unter Primärschlüssel und Sekundärschlüssel.
Das könnten wir so machen und eine Datenbank mit exakt dieser Struktur anlegen. Aber … wir wollen was lernen und wir wollen die Grundprinzipien bei der Datenbankentwicklung umsetzen. Ein Grundprinzip lautet, keine doppelten Daten zu produzieren.
Wichtig ist, auf Datenredundanz zu achten. Problem ist, dass dadurch im Lauf der Zeit viele Fehler sich einschleichen, weil es menschelt. Es kann vergessen werden, alle Daten zu korrigieren. Dann wird einmal z. B. nur die PLZ geändert und der Ort vergessen, ein anderesmal wird nur der Ort geändert, aber die PLZ vergessen - es entsteht zunehmend Datenchaos, dass durch einen sinnvollen Aufbau der Datenbank vermieden (oder zumindest minimiert) werden hätte können. Das ganze kann auch mehr Komfort für den Datenerfasser bieten - beispielsweise gibt es bereits fertige Datenbanken mit allen Postleitzahlen und zugehörigen Orten. Wenn diese mit eingebunden wird, muss nur noch die PLZ erfasst werden und der korrekte Ort erscheint dann automatisch.
Bei unserer obigen Adresstabelle fallen 2 Felder ins Auge, die sich gerne inhaltlich wiederholen können – die Anrede und der Ort.
Für den Ort haben wir eine eindeutige Zahl in Deutschland – die PLZ (wir machen es nun nicht komplizierter und gehen einfach davon aus, dass es nur deutsche Adressen sind und es für jede PLZ nur einen Ort gibt!).
Aus unserer einfachen Tabelle sind nun schon 2 geworden. Eine Tabelle mit der Adresse mit PLZ und eine Tabelle mit PLZ und Ort
Tabelle: Adresse:
| id | nachname | vorname | anrede | strasse | plz | telefon | leseausweisnr |
|---|---|---|---|---|---|---|---|
| 1 | Müller | Fritz | Herr | Hauptstr. 12 | 72070 | 07071-555-12312 | 1289234877 |
| 2 | Simmer | Susi | Frau | Herbstallee 1 | 72074 | 07071-555-654654 | |
| 3 | Sommer | Susi | Frau | 72074 | 07071-555-64444 | 984613325 |
Tabelle: Plz:
| plz | ort |
|---|---|
| 72070 | Tübingen |
| 72074 | Tübingen |
Und weiterhin wollen wir die Anrede herausnehmen – schwups haben wir 3 Tabellen. In der Anrede wird nun nur noch m für männlich und w für weiblich gespeichert.
Tabelle: Adresse:
| id | nachname | vorname | akuerzel | strasse | plz | telefon | leseausweisnr |
|---|---|---|---|---|---|---|---|
| 1 | Müller | Fritz | m | Hauptstr. 12 | 72070 | 07071-555-12312 | 1289234877 |
| 2 | Simmer | Susi | w | Herbstallee 1 | 72074 | 07071-555-654654 | |
| 3 | Sommer | Susi | w | 72074 | 07071-555-64444 | 984613325 |
Tabelle: Plz:
| plz | ort |
|---|---|
| 72070 | Tübingen |
| 72074 | Tübingen |
Tabelle: anrede:
| akuerzel | anrede |
|---|---|
| w | Frau |
| m | Herr |
Im dritten Schritt packen wir alle logisch zusammenpassenden Daten jeweils in eine Tabelle - oder andersherum gesehen, wir werfen Datenfelder aus Tabellen, die logisch nicht passen, und bauen daraus eine weitere Tabelle.
In unserem Beispiel haben wir bei der Adresse das Datenfeld "leseausweisnr" - diese passt aus logischer Sicht nicht zu den Daten der Adresse. Wir machen daraus unsere 4. Tabelle - die exakte Begründung für dieses Vorgehen ist im Kapitel Normalisierung (3N) zu finden.
Tabelle: Adresse:
| id | nachname | vorname | akuerzel | strasse | plz | telefon |
|---|---|---|---|---|---|---|
| 1 | Müller | Fritz | m | Hauptstr. 12 | 72070 | 07071-555-12312 |
| 2 | Simmer | Susi | w | Herbstallee 1 | 72074 | 07071-555-654654 |
| 3 | Sommer | Susi | w | 72074 | 07071-555-64444 |
Tabelle: Plz:
| plz | ort |
|---|---|
| 72070 | Tübingen |
| 72074 | Tübingen |
Tabelle: anrede:
| akuerzel | anrede |
|---|---|
| w | Frau |
| m | Herr |
Tabelle: anrede:
| a-id | leseausweisnr |
|---|---|
| 1 | 1289234877 |
| 3 | 984613325 |
Die Person mit der ID 2 hat keinen Leseausweis, dadurch wird kein Datensatz notwendig.