Site x5

Alles zum Thema Normalisieren

Ein gutes Datenbankdesign zeichnet sich durch ein Minimum an Redundanzen aus.

Normalisierung ist ein Entwurfsansatz für relationale Datenbanken mit dem Ziel, Redundanzen und die damit einhergehenden Anomalien zu vermeiden.

Dabei werden die Daten durch Anwendung von Regeln strukturiert, bis sie den Anforderungen der entsprechenden Normalform genügen.

Beispieltabelle

Schauen wir uns folgende Tabelle des Beispielunternehmens xy an. Dort werden in nur einer Tabelle Informationen über die Mitarbeiter, Abteilungen, Projekte sowie die Zuordnung der Mitarbeiter zu einem Projekt gespeichert.

Firma_xy
Mitarbeiter
ID
Mitarbeiter...
Mitarbeiter
Name
Mitarbeiter...
Mitarbeiter
Gehalt
Mitarbeiter...
Abteilungs
ID
Abteilungs...
Abteilungs
Name
Abteilungs...
Abteilungs
LeiterID
Abteilungs...
Abteilungs
Standort
Abteilungs...
Projekt
Nr
Projekt...
Projekt
Name
Projekt...
Projekt
Budget
Projekt...
101
101
Anna Schmidt
Anna Schmidt
4500
4500
A01
A01
IT
IT
107
107
Frankfurt
Frankfurt
P001,
P003
P001,...
CRM System, Website Relaunch
CRM System, Web...
50000, 25000
50000, 250...
102
102
Tom Fischer
Tom Fischer
4200
4200
A01
A01
IT
IT
107
107
Frankfurt
Frankfurt
P001
P001
CRM System
CRM System
50000
50000
103
103
Lisa Müller
Lisa Müller
3800
3800
A02
A02
Marketing
Marketing
108
108
München
München
P002,
P003
P002,...
Social Media Kampagne, Website Relaunch
Social Media Ka...
15000, 25000
15000, 250...
104
104
Max Weber
Max Weber
4600
4600
A01
A01
IT
IT
107
107
Frankfurt
Frankfurt
P001,
P004
P001,...
CRM System, Mobile App
CRM System, Mob...
50000, 40000
50000, 400...
105
105
Sarah Klein
Sarah Klein
4100
4100
A03
A03
Personal
Personal
109
109
Hamburg
Hamburg
P005
P005
Recruiting Portal
Recruiting Port...
20000
20000
106
106
Peter Braun
Peter Braun
4300
4300
A02
A02
Marketing
Marketing
108
108
München
München
P002
P002
Social Media Kampagne
Social Media Ka...
15000
15000
107
107
Klaus Weber
Klaus Weber
5500
5500
A01
A01
IT
IT
107
107
Frankfurt
Frankfurt
-
-
-
-
-
-
108
108
Stefan Braun
Stefan Braun
5200
5200
A02
A02
Marketing
Marketing
108
108
München
München
-
-
-
-
-
-
109
109
Maria Klein
Maria Klein
5000
5000
A03
A03
Personal
Personal
109
109
Hamburg
Hamburg
-
-
-
-
-
-

Der alte Admin (der nicht mehr in der Firma arbeitet) hatte damals beim Erstellen der Tabelle festgelegt, dass alle Spalten den Constraint NOT NULL erhalten. Der neue Admin wiederum hatte in der Ausbildung das Thema Constraints und generell Tabellenmanagement verpasst, weiß also nicht, wie man diese nervige Einschränkung entfernt.

Der NOT NULL Constraint verhindert, dass beim Einfügen von Zeilen eine Spalte leer bleibt, sie muss also mit irgendeinem Wert befüllt werden.

Die drei Abteilungsleiter (ID 107, 108 und 109) sind keinem Projekt zugeordnet und konnten nur eingefügt werden, weil ein "dummy" Projekt verwendet wurde (Alle Attribute -).

Anomalien

In der Beispieltabelle können verschiedene Dinge schief gehen sobald sie aktualisiert werden muss.

Diese Dinge, die schief gehen können, werden Anomalien genannt. Sie treten beim Einfügen, Löschen oder Ändern von Daten auf und führen zu ungewollten Nebeneffekten, Datenverlust oder Dateninkonsistenz.

Einfügeanomalie

Das Problem ist, dass neue Daten nur unvollständig oder gar nicht eingefügt werden können.

Beispiel:

Mit neuen Mitarbeitern, Projekten und Sachverhalten wie "neuer Mitarbeiter ohne Projekt- oder Abteilungszuweisung" ergibt sich das gleiche Problem.

Löschanomalie

Beim Löschen von Datensätzen können ungewollt andere Informationen verloren gehen.

Beispiele:

Änderungsanomalie

Das Problem bei Änderungen ist, dass sie an mehreren Stellen vorgenommen werden müssen. Das Vergessen einer einzigen Stelle reicht aus, um die Datenbank in einem inkonsistenten Zustand zu hinterlassen.

Beispiele:

Normalisierung

Die Normalisierung löst all diese Probleme, indem jede Information nur einmal gespeichert wird und über Fremdschlüssel referenziert wird. Dadurch werden Änderungen nur an einer Stelle vorgenommen und Inkonsistenzen werden strukturell verhindert.

1. Normalform

Anforderungen der NF1:

2. Normalform

Anforderungen der NF2:

Diese Anforderung kann nur verletzt werden, wenn die Tabelle einen zusammengesetzten Primärschlüssel hat, wenn sich der Schlüssel also aus mehr als einer Spalte zusammensetzt.

Eine Tabelle, die die 1. Normalform erfüllt und deren Primärschlüssel nur aus einer Spalte besteht, erfüllt automatisch die 2. Normalform

3. Normalform

Anforderungen der NF3:

Normalformen anwenden

Was das alles bedeutet, schauen wir uns jetzt an, indem wir die Beispieltabelle Schritt für Schritt in die 3. Normalform überführen und die Probleme anschauen, die im Verlauf der Normalisierung entstehen.

Überführung in 1. Normalform

Wir schauen uns nochmal die Beispieltabelle an und untersuchen, ob sie die NF1 erfüllt.

Firma_xy
Mitarbeiter
ID
Mitarbeiter...
Mitarbeiter
Name
Mitarbeiter...
Mitarbeiter
Gehalt
Mitarbeiter...
Abteilungs
ID
Abteilungs...
Abteilungs
Name
Abteilungs...
Abteilungs
LeiterID
Abteilungs...
Abteilungs
Standort
Abteilungs...
Projekt
Nr
Projekt...
Projekt
Name
Projekt...
Projekt
Budget
Projekt...
101
101
Anna Schmidt
Anna Schmidt
4500
4500
A01
A01
IT
IT
107
107
Frankfurt
Frankfurt
P001,
P003
P001,...
CRM System, Website Relaunch
CRM System, Web...
50000, 25000
50000, 250...
102
102
Tom Fischer
Tom Fischer
4200
4200
A01
A01
IT
IT
107
107
Frankfurt
Frankfurt
P001
P001
CRM System
CRM System
50000
50000
103
103
Lisa Müller
Lisa Müller
3800
3800
A02
A02
Marketing
Marketing
108
108
München
München
P002,
P003
P002,...
Social Media Kampagne, Website Relaunch
Social Media Ka...
15000, 25000
15000, 250...
104
104
Max Weber
Max Weber
4600
4600
A01
A01
IT
IT
107
107
Frankfurt
Frankfurt
P001,
P004
P001,...
CRM System, Mobile App
CRM System, Mob...
50000, 40000
50000, 400...
105
105
Sarah Klein
Sarah Klein
4100
4100
A03
A03
Personal
Personal
109
109
Hamburg
Hamburg
P005
P005
Recruiting Portal
Recruiting Port...
20000
20000
106
106
Peter Braun
Peter Braun
4300
4300
A02
A02
Marketing
Marketing
108
108
München
München
P002
P002
Social Media Kampagne
Social Media Ka...
15000
15000
107
107
Klaus Weber
Klaus Weber
5500
5500
A01
A01
IT
IT
107
107
Frankfurt
Frankfurt
-
-
-
-
-
-
108
108
Stefan Braun
Stefan Braun
5200
5200
A02
A02
Marketing
Marketing
108
108
München
München
-
-
-
-
-
-
109
109
Maria Klein
Maria Klein
5000
5000
A03
A03
Personal
Personal
109
109
Hamburg
Hamburg
-
-
-
-
-
-

Folgendes Bild zeigt, wie die Tabelle nach Anwendung der beiden Regeln aussieht:

Firma_xy
Mitarbeiter
ID
Mitarbeiter...
Mitarbeiter
Vorname
Mitarbeiter...
Mitarbeiter
Nachname
Mitarbeiter...
Mitarbeit
Gehalt
Mitarbeit...
Abteilungs
ID
Abteilungs...
Abteilungs
Name
Abteilungs...
Abteilungs
LeiterID
Abteilungs...
Abteilungs
Standort
Abteilungs...
Projekt
Nr
Projekt...
Projekt
Name
Projekt...
Projekt
Budget
Projekt...
101
101
Anna
Anna
Schmidt
Schmidt
4500
4500
A01
A01
IT
IT
107
107
Frankfurt
Frankfurt
P001
P001
CRM System
CRM System
50000
50000
101
101
Anna
Anna
Schmidt
Schmidt
4500
4500
A01
A01
IT
IT
107
107
Frankfurt
Frankfurt
P003
P003
Website Relaunch
Website Rel...
25000
25000
102
102
Tom
Tom
Fischer
Fischer
4200
4200
A01
A01
IT
IT
107
107
Frankfurt
Frankfurt
P001
P001
CRM System
CRM System
50000
50000
103
103
Lisa
Lisa
Müller
Müller
3800
3800
A02
A02
Marketing
Marketing
108
108
München
München
P002
P002
Social Media Kampagne
Social Medi...
15000
15000
103
103
Lisa
Lisa
Müller
Müller
3800
3800
A02
A02
Marketing
Marketing
108
108
München
München
P003
P003
Website Relaunch
Website Rel...
25000
25000
104
104
Max
Max
Weber
Weber
4600
4600
A01
A01
IT
IT
107
107
Frankfurt
Frankfurt
P001
P001
CRM System
CRM System
50000
50000
104
104
Max
Max
Weber
Weber
4600
4600
A01
A01
IT
IT
107
107
Frankfurt
Frankfurt
P004
P004
Mobile App
Mobile App
40000
40000
105
105
Sarah
Sarah
Klein
Klein
4100
4100
A03
A03
Personal
Personal
109
109
Hamburg
Hamburg
P005
P005
Recruiting Portal
Recruiting...
20000
20000
106
106
Peter
Peter
Braun
Braun
4300
4300
A02
A02
Marketing
Marketing
108
108
München
München
P002
P002
Social Media Kampagne
Social Medi...
15000
15000
107
107
Klaus
Klaus
Weber
Weber
5500
5500
A01
A01
IT
IT
107
107
Frankfurt
Frankfurt
-
-
-
-
-
-
108
108
Stefan
Stefan
Braun
Braun
5200
5200
A02
A02
Marketing
Marketing
108
108
München
München
-
-
-
-
-
-
109
109
Maria
Maria
Klein
Klein
5000
5000
A03
A03
Personal
Personal
109
109
Hamburg
Hamburg
-
-
-
-
-
-

Problem
Durch das Einfügen der Wiederholungsgruppen hat die Spalte MitarbeiterID ihren Status als Primärschlüsselspalte verloren.

Wir nehmen die Spalte ProjektNr zum Primärschlüssel hinzu und erhalten zusammen mit MitarbeiterID eine einzigartige Kombination aus Werten, die sich für die eindeutige Identifizierung jeder einzigen Zeile eignet. Wir haben jetzt einen zusammengesetzten Primärschlüssel.

Die Tabelle erfüllt jetzt die 1. Normalform

Überführung in 2. Normalform

Eine Tabelle kann die 2. Normalform nur dann verletzen, wenn sie einen zusammengesetzten Primärschlüssel hat. Das ist hier der Fall, wir müssen also sicherstellen, dass alle Regeln eingehalten werden.

Die Erfüllung der 1. Normalform ist eine Voraussetzung für das Erfüllen der 2. (und 3.) Normalform und das ist hier gegeben.

Abhängigkeiten

Jetzt müssen wir untersuchen, ob alle Nichtschlüsselattribute auschließlich vom gesamtem Primärschlüssel abhängen oder möglicherweise nur einem Teil des Schlüssels.

Wenn ein Attribut b von einem anderen Attribut a abhängt, bedeutet das, dass der Wert von b eindeutig durch den Wert von a bestimmt wird.

In unserer Tabelle hängen die Attribute MitarbeiterVorname, MitarbeiterNachname, MitarbeiterGehalt und AbteilungsID alle von MitarbeiterID ab, einem Teil des Primärschlüssels, die 2. NF ist also verletzt.

Genau das gleiche Problem haben wir mit den Attributen ProjektName und ProjektBudget, die beide von ProjektNr abhängen, einem anderen Teil des Primärschlüssels:

Mitarbeiter
ID
Mitarbeiter...
Mitarbeiter
Vorname
Mitarbeiter...
Mitarbeiter
Nachname
Mitarbeiter...
Mitarbeit
Gehalt
Mitarbeit...
Abteilungs
ID
Abteilungs...
Abteilungs
Name
Abteilungs...
Abteilungs
LeiterID
Abteilungs...
Abteilungs
Standort
Abteilungs...
Projekt
Nr
Projekt...
Projekt
Name
Projekt...
Projekt
Budget
Projekt...

Die rot gekennzeichneten Abhängigkeiten verletzen die 2. Normalform nicht, da AbteilungsID nicht Teil des Primärschlüssels ist.

Lösung

Um die Tabelle in die 2. Normalform zu bringen, müssen alle abhängigen Attribute mitsamt ihrem Teilschlüssel in eine eigene Tabelle ausgelagert werden. In der ursprünglichen Tabelle bleibt nur der Teilschlüssel zurück.

In unserem Beispiel ist AbteilungsID eins dieser abhängigen Attribute, es muss also ausgelagert werden. Da die Informationen zur Abteilung von diesem Attribut abhängig sind, müssen sie auch mitausgelagert werden.

Mitarbeiter
ID
Mitarbeiter...
Mitarbeiter
Vorname
Mitarbeiter...
Mitarbeiter
Nachname
Mitarbeiter...
Mitarbeit
Gehalt
Mitarbeit...
Abteilungs
ID
Abteilungs...
Abteilungs
Name
Abteilungs...
Abteilungs
LeiterID
Abteilungs...
Abteilungs
Standort
Abteilungs...
Projekt
Nr
Projekt...
Projekt
Name
Projekt...
Projekt
Budget
Projekt...
Mitarbeiter
Mitarbeiter
ID
Mitarbeiter...
Mitarbeiter
Vorname
Mitarbeiter...
Mitarbeiter
Nachname
Mitarbeiter...
Mitarbeit
Gehalt
Mitarbeit...
Abteilungs
ID
Abteilungs...
Abteilungs
Name
Abteilungs...
Abteilungs
LeiterID
Abteilungs...
Abteilungs
Standort
Abteilungs...
Mitarbeiter_Projekt
Mitarbeiter
ID
Mitarbeiter...
Projekt
Nr
Projekt...
Projekt
Projekt
Nr
Projekt...
Projekt
Name
Projekt...
Projekt
Budget
Projekt...

Die Tabellen erfüllen jetzt die 2. Normalform

Überführung in 3. Normalform

Das Erfüllen der 2. Normalform ist Voraussetzung für das Erfüllen der 3. Normalform.

Unsere Tabellen liegen in 2. Normalform vor und müssen jetzt daraufhin untersucht werden, ob es Nichtschlüsselattribute gibt, die von einem anderen Nichtschlüsselattribut abhängen.

Transitive Abhängigkeiten

Wie wir bereits im vorherigen Schritt gesehen haben, hängen die Attribute AbteilungsName, AbteilungsLeiterID und AbteilungsStandort vom Attribut AbteilungsID ab. Dieses ist ein Nichtschlüsselattribut, welches wiederum vom Primärschlüssel abhängt. Diese Attribute hängen also indirekt von einem anderen Attribut ab:

Mitarbeiter
Mitarbeiter
ID
Mitarbeiter...
Mitarbeiter
Vorname
Mitarbeiter...
Mitarbeiter
Nachname
Mitarbeiter...
Mitarbeit
Gehalt
Mitarbeit...
Abteilungs
ID
Abteilungs...
Abteilungs
Name
Abteilungs...
Abteilungs
LeiterID
Abteilungs...
Abteilungs
Standort
Abteilungs...
Mitarbeiter_Projekt
Mitarbeiter
ID
Mitarbeiter...
Projekt
Nr
Projekt...
Projekt
Projekt
Nr
Projekt...
Projekt
Name
Projekt...
Projekt
Budget
Projekt...

Diese Abhängigkeit nennt man transitive Abhängigkeit und man sagt z.B. AbteilungsName ist transitiv von MitarbeiterID abhängig.

MitarbeiterID -> AbteilungsID und AbteilungsID -> AbteilungsName
==>
MitarbeiterID -> AbteilungsName (transitiv)

Eine transitive Abhängigkeit ist eine Verletzung der 3. Normalform

Lösung

Um die Tabelle in die 3. Normalform zu bringen, lagert man wieder alle abhängigen Attribute mitsamt dem Nichtschlüsselattribut, vom dem sie abhängen, in eine neue Tabelle aus. In der ursprünglichen Tabelle bleibt nur das Nichtschlüsselattribut zurück, von dem die anderen Attribute abhängen:

Mitarbeiter
Mitarbeiter
ID
Mitarbeiter...
Mitarbeiter
Vorname
Mitarbeiter...
Mitarbeiter
Nachname
Mitarbeiter...
Mitarbeit
Gehalt
Mitarbeit...
Abteilungs
ID
Abteilungs...
Abteilungs
Name
Abteilungs...
Abteilungs
LeiterID
Abteilungs...
Abteilungs
Standort
Abteilungs...
Abteilung
Abteilungs
ID
Abteilungs...
Abteilungs
Name
Abteilungs...
Abteilungs
LeiterID
Abteilungs...
Abteilungs
Standort
Abteilungs...
Mitarbeiter
Mitarbeiter
ID
Mitarbeiter...
Mitarbeiter
Vorname
Mitarbeiter...
Mitarbeiter
Nachname
Mitarbeiter...
Mitarbeit
Gehalt
Mitarbeit...
Abteilungs
ID
Abteilungs...

Fazit

Durch die schrittweise Anwendungen der Regeln haben wir die Ursprüngliche Tabelle in die 3. Normalform überführt, was zur Folge hat, dass Änderungen an den Tabellen deutlich weniger Angriffsfläche für Fehler bieten.

Vollständige Tabellen in der 3. Normalform:

Abteilung
Abteilungs
ID
Abteilungs...
Abteilungs
Name
Abteilungs...
Abteilungs
LeiterID
Abteilungs...
Abteilungs
Standort
Abteilungs...
A01
A01
IT
IT
107
107
Frankfurt
Frankfurt
A02
A02
Marketing
Marketing
108
108
München
München
A03
A03
Personal
Personal
109
109
Hamburg
Hamburg
Mitarbeiter_Projekt
Mitarbeiter
ID
Mitarbeiter...
Projekt
Nr
Projekt...
101
101
P001
P001
101
101
P003
P003
102
102
P001
P001
103
103
P002
P002
103
103
P003
P003
104
104
P001
P001
104
104
P004
P004
105
105
P005
P005
106
106
P002
P002
Projekt
Projekt
Nr
Projekt...
Projekt
Name
Projekt...
Projekt
Budget
Projekt...
P001
P001
CRM System
CRM System
50000
50000
P002
P002
Social Media Kampagne
Social Media...
15000
15000
P003
P003
Website Relaunch
Website Relau...
25000
25000
P004
P004
Mobile App
Mobile App
40000
40000
P005
P005
Recruiting Portal
Recruiting Po...
20000
20000
Mitarbeiter
Mitarbeiter
ID
Mitarbeiter...
Mitarbeiter
Vorname
Mitarbeiter...
Mitarbeiter
Nachname
Mitarbeiter...
Mitarbeit
Gehalt
Mitarbeit...
Abteilungs
ID
Abteilungs...
101
101
Anna
Anna
Schmidt
Schmidt
4500
4500
A01
A01
102
102
Tom
Tom
Fischer
Fischer
4200
4200
A01
A01
103
103
Lisa
Lisa
Müller
Müller
3800
3800
A02
A02
104
104
Max
Max
Weber
Weber
4600
4600
A01
A01
105
105
Sarah
Sarah
Klein
Klein
4100
4100
A03
A03
106
106
Peter
Peter
Braun
Braun
4300
4300
A02
A02
107
107
Klaus
Klaus
Weber
Weber
5500
5500
A01
A01
108
108
Stefan
Stefan
Braun
Braun
5200
5200
A02
A02
109
109
Maria
Maria
Klein
Klein
5000
5000
A03
A03
1
1
1
1
n
n
1
1
n
n
1
1
1
1
n
n

Die Information, dass Klaus Weber Leiter der IT-Abteilung ist, ist nur noch einmal gespeichert, eine Änderungen muss also nur noch an einer Stelle erfolgen (in der Tabelle Abteilung).

Generell sind keine Redundanzen mehr vorhanden, das spart auch Speicherplatz!

Außerdem können Projekte, Mitarbeiter usw angelegt werden, ohne dass andere Datensätze hinzugefügt oder verknüpft werden müssen. Auf Notlösungen wie "dummy" Datensätze kann verzichtet werden.

Zuletzt können Datensätze gelöscht werden, ohne ungewollte Nebeneffekte zu verursachen.

Übung

Hier geht's zur Übung 1
Hier zur Übung 2