Wenn wir über die Analyse einer Datenbank auf Einhaltung der Normalformen sprechen, meinen wir das Untersuchen der Tabellenstruktur, ihrer Beziehungen und der Abhängigkeiten zwischen Attributen. Das Hauptziel der Analyse ist es, Verstöße gegen die Normalisierung zu finden und deren Einfluss auf Performance, Integrität und die Handhabung der Daten zu bewerten.
Einfach gesagt, das ist wie ein Audit in der Buchhaltung: Du prüfst, dass das Geld nicht irgendwo herumliegt, sondern ordentlich auf die richtigen Ausgabenkategorien verteilt ist.
Praktischer Ansatz zur Analyse einer Datenbank
In jeder Datenbank starten wir damit, drei grundlegende Fragen zu stellen, die den drei Normalformen entsprechen.
Nehmen wir an, wir haben eine Lager-Datenbank mit einer Tabelle folgender Struktur:
| product_id | product_name | supplier_name | supplier_phone | stock_quantity |
|---|---|---|---|---|
| 1 | Nägel | StroiKomplekt | +12301112233 | 150 |
| 2 | Schrauben | KrepezhPro | +12306667788 | 200 |
| 3 | Muttern | StroiKomplekt | +12301112233 | 100 |
Wie prüft man diese Tabelle auf Einhaltung der Normalformen?
Zur Erinnerung: Eine Tabelle ist in 1NF, wenn:
- Jede Zelle enthält genau einen Wert.
- Es gibt keine wiederholenden Spalten für denselben Datentyp.
In unserem Beispiel gibt es keinen 1NF-Verstoß: Jede Zelle enthält einen atomaren Wert. Das heißt, die Tabelle ist in 1NF. Yay! Weiter geht’s.
Eine Tabelle ist in 2NF, wenn:
- Sie sich in 1NF befindet.
- Alle Nicht-Schlüsselattribute nur vom gesamten Primärschlüssel abhängen (und nicht von einem Teil davon).
In dieser Tabelle sehen wir, dass supplier_name und supplier_phone nur von product_id – dem Primärschlüssel – abhängen. Allerdings gibt es hier Daten-Duplikate: Für denselben Lieferanten speichern wir Name und Telefon mehrfach.
Um die Tabelle in 2NF zu bringen, können wir sie in zwei Tabellen aufteilen:
Tabelle Products:
| product_id | product_name | supplier_id | stock_quantity |
|---|---|---|---|
| 1 | Nägel | 1 | 150 |
| 2 | Schrauben | 2 | 200 |
| 3 | Muttern | 1 | 100 |
Tabelle Suppliers:
| supplier_id | supplier_name | supplier_phone |
|---|---|---|
| 1 | StroiKomplekt | +78901112233 |
| 2 | KrepezhPro | +78906667788 |
Jetzt ist jeder Lieferant nur einmal vorhanden, und die Verbindung zwischen den Tabellen läuft über den Fremdschlüssel supplier_id.
Eine Tabelle ist in 3NF, wenn:
- Sie sich in 2NF befindet.
- Alle Nicht-Schlüsselattribute nur vom Primärschlüssel abhängen und nicht von anderen Nicht-Schlüsselattributen.
Bei den normalisierten Tabellen Products und Suppliers sehen wir keine transitiven Abhängigkeiten. Das heißt, die Tabellen sind in 3NF.
Praktische Aufgabe
Nehmen wir an, wir haben die Ausgangstabelle "Universität"
| student_id | student_name | course_name | professor_name | professor_email |
|---|---|---|---|---|
| 101 | Otto Lin | Mathematik | Peter Pen | pen@university.com |
| 102 | Anna Song | Physik | Alex Sid | sid@university.com |
| 103 | Otto Lin | Physik | Alex Sid | sid@university.com |
- Prüfe die Tabelle auf Einhaltung der Normalformen.
- Bringe sie ggf. in 1NF, 2NF und 3NF.
Lösung
SCHRITT 1: Prüfung auf 1NF
Die Tabelle ist schon in 1NF: Jede Zelle enthält einen Wert.
SCHRITT 2: Prüfung auf 2NF
Die Tabelle verletzt 2NF: Die Infos zu den Professoren (Name und Email) wiederholen sich. Wir können sie in eine eigene Tabelle auslagern:
Tabelle Students:
| student_id | student_name |
|---|---|
| 101 | Otto Lin |
| 102 | Anna Song |
Tabelle Courses:
| course_id | course_name | professor_id |
|---|---|---|
| 1 | Mathematik | 1 |
| 2 | Physik | 2 |
Tabelle Professors:
| professor_id | professor_name | professor_email |
|---|---|---|
| 1 | Peter Pen | pen@university.com |
| 2 | Alex Sid | sid@university.com |
Tabelle Enrollments:
| enrollment_id | student_id | course_id |
|---|---|---|
| 1 | 101 | 1 |
| 2 | 102 | 2 |
| 3 | 103 | 2 |
SCHRITT 3: Prüfung auf 3NF
In der neuen Struktur gibt es keine transitiven Abhängigkeiten. Die Tabellen sind in 3NF.
Praktische Tipps
- Strebe nicht nach Perfektion ohne Notwendigkeit. Zu viel Normalisierung macht Abfragen manchmal unnötig kompliziert.
- Analysiere wie ein Detektiv. Suche nach Duplikaten, unnötigen Abhängigkeiten und anderen "Anomalien".
- Vergiss die Performance nicht. Normalisierung ist ein Balanceakt zwischen Datenklarheit und Geschwindigkeit der Verarbeitung.
Jetzt, wo du gelernt hast, Probleme in einer Datenbank zu finden und zu lösen, könntest du ehrlich ein "Audit" für jede beliebige Datenbank machen. Denk dran: Eine gute Datenbank ist nicht nur funktional, sondern auch schön (oder eben normalisiert) aufgebaut.
GO TO FULL VERSION