CodeGym /Kurse /SQL SELF /Analyse bestehender Datenbanken auf Einhaltung der Normal...

Analyse bestehender Datenbanken auf Einhaltung der Normalformen

SQL SELF
Level 26 , Lektion 2
Verfügbar

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
  1. Prüfe die Tabelle auf Einhaltung der Normalformen.
  2. 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

  1. Strebe nicht nach Perfektion ohne Notwendigkeit. Zu viel Normalisierung macht Abfragen manchmal unnötig kompliziert.
  2. Analysiere wie ein Detektiv. Suche nach Duplikaten, unnötigen Abhängigkeiten und anderen "Anomalien".
  3. 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.

Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION