Normalisierung Teil 1

von tantetoni2 am 27. Februar 2011 um 01:42 Uhr. »
Kommentare (0)  | Drucken

1. Datenbankdesign


Bevor wir uns an gutes heranwagen, will ich erst mal zeigen, wie man es nicht macht und warum. Nehmen wir mal folgende Situation an. Wir sind ein Zwischenhändler, der Zahnärzte mit allem ausstattet, was die brauchen, um uns zu foltern. Wie ich auf diese Schnapsidee gekommen bin? Ganz einfach, ich war mal bei einer Zahnärztin, und die klagte mir, dass sie nicht mit Microsoft Access klarkommt. Ich habe dann auf der Fahrt zur Arbeit überlegt, wie man das am Besten erklären kann. Das Ergebnis seht ihr hier.

2. Entwurf


Man könnte nun auf die Idee kommen, alle Bestellungen, so wie man es normalerweise aus Excel gewöhnt ist, einfach in eine Tabelle zu packen. Die Spalten adresse und hersteller mußte ich aus Platzgründen nach unten stellen. Denkt euch einfach, dass sie neben der Spalte telefon_fax stehen. Natürlich sind die Angaben völliger Blödsinn.

Tabelle Bestellung
+--+------------+------+--------+------+----------+---------------+
|id|produkt     |preis  |nummer |anzahl|doktor   |telefon_fax     |
+--+------------+------+--------+------+----------+---------------+
| 1|Schlagbohrer|199.95|1000-1|1     |Blutgesicht |123-550,123-551|
| 2|Zement      |  5.95|1000-2|5     |Quälstein   |456-777,456-778|
| 3|Kneifzange  | 19.95|1000-3|3     |Eisenfaust  |789-250,789-251|
| 4|Brecheisen  | 49.95|1000-4|7     |Rostzange   |234-100,234-101|
| 5|Hammer      | 19.95|1000-5|4     |Frankenstein|567-200.567-201|
| 6|Zement      |  5.95|1000-2|9     |Eisenfaust  |789-250,789-251|
| 7|Brecheisen  | 49.95|1000-4|2     |Blutgesicht |123-550,123-551|
+--+------------+------+------+------+------------+---------------+
+-------------------------------+-----------------------+
|adresse                        |hersteller             |
+-------------------------------+-----------------------+
|Kariesweg 1, 12345 Zahnstein   |Hilti, Adresse...      |
|Lochpfad 23, 23458 Schmerzstadt|Hoch & Tief, Adresse...|
|Zahnwurzel 3, 87454 Dolomostadt|Eisen-Karl, Adresse... |
|Peinweg 5, 74512 Reissheim     |Eisen-Karl, Adresse... |
|Am Dom 5, 50670 Köln           |Stahl AG, Adresse...   |
|Zahnwurzel 3, 87454 Dolomostadt|Hoch & Tief, Adresse...|
|Kariesweg 1, 12345 Zahnstein   |Eisen-Karl, Adresse... |
+-------------------------------+-----------------------+

3. Problematik


Allerdings fällt sofort etwas auf. Wir haben etliche doppelte Einträge und das kann zu großen Problemen führen. Im Moment sieht alles noch sehr übersichtlich aus. Aber was passiert, wenn wir 10.000 Einträge haben?
Nehmen wir mal an, Dr. Frankenstein ginge wieder seiner ursprünglichen Profession nach und würde Menschen zusammenbauen. Er fiele als unser Kunde weg, und würde nur noch als Karteileiche in unserer Datenbank unnötig Speicherplatz belegen. Oder die Einkaufspreise steigen. Oder Eisen-Karl kann nicht mehr liefern, da er pleite ist. Und wo zum Teufel kommen eigentlich die Produkte her? Wie kann jemand etwas bestellen, wenn das nicht irgendwo zentral gespeichert ist?
Ihr habt also schon gemerkt, dass unser erster Entwurf ziemlicher Müll ist, da wir bei Änderungen immer wieder vor großen Problemen stehen. Gottlob stellen uns die Mathematik und Informatik ein Werkzeug zur Verfügung, mit der wir unsere Datenbanken so aufbauen, dass sie pflegeleicht und gut wartbar sind. Das nennt sich Normalisierung. Allerdings müssen wir vorher noch ein paar Begriffe klären.

4. Redundanzen, Anomalien, Inkonsistenzen


Hinter diesen Begriffen verbirgt sich alles, was den logischen Aufbau unserer Datenbank gefährden könnte. Einen ersten Einblick in die Problematik habe ich euch schon oben gegeben.
Redundanzen, Redundanzfreiheit
Redundanzen sind einfach ausgedrückt, doppelt gespeicherte Informationen. In unserem ersten Entwurf haben wird die zuhauf, bei den Produkten, Preisen, Doktoren oder Adressen. Redundanzfreiheit ist also nur das Gegenteil von Redundanz, also die Vermeidung doppelter Einträge. Die Vorteile liegen auf der Hand:
geringerer Speicherbedarf
Erhöhung der Wartbarkeit
Vermeidung von Inkonsistenzen und Anomalien
Inkonsistenzen, Anomalien
Sind widersprüchliche Daten oder logische Brüche innerhalb eine Datenbank. Sie treten sehr oft auf, wenn man zum Beispiel Änderungen an den Inhalten vornimmt und gewisse Relationen(!) vergisst.

5. Normalisierung


Dies ist eine Sammlung von Regeln, die eingehalten werden sollten, um obige Probleme zu vermeiden. Sie gliedert sich in fünf Normalformen plus vier Sonderformen. Für normale Anwendungen (und die Einführung) reichen die ersten drei Normalformen erst mal aus.

zu Teil 2 1. Normalform
zu Teil 3 2. Normalform
zu Teil 4 3. Normalform
zu Teil 5 Eine normalisierte Datenbank

Diesen Beitrag teilen

RSS-Feed  auf Twitter.com teilen  auf delicious.com teilen  auf Digg.com teilen   auf Facebook.com teilen


Kommentare
noch keine Kommentare vorhanden