StartseiteDatenbankenMySQL

Normalisierung

26. JULI 2011
von Jörg
Datenbanken - MySQL

Das Design einer relationalen Datenbank ist eine sehr wichtige Phase, die der Erstellung einer Datenbank vorangeht. Falls das Datenbankdesign intuitiv und ohne sorgfältige Analysephase entworfen ist, ist die daraus resultierende Datenbank in den meisten Fällen nicht optimal an die Aufgabe, zu deren Lösung sie aufgebaut wurde, angepasst. Die daraus resultierende Folge kann überflüssige Datenredundanz mit damit verbundenen Nachteilen für Speicherverbrauch und Datenkonsistenz sein.

Ziele der Normalisierung:
  • Erzeugen einer flexiblen, stabilen Datenbank, bei der Veränderungen leicht durchzuführen sind
  • Vermeiden von Regelwidrigkeiten (Anomalien) beim Ändern (=Update-Anomalie), Löschen (=Delete-Anomalie) und Einfügen (=Insert-Anomalie) von Datensätzen
    • Update-Anomalie: Ungewolltes Mitändern von Information bei einer Änderung
    • Delete-Anomalie: Ungewolltes Mitlöschen einer Information bei einer Löschoperation
    • Insert-Anomalie: Unmöglichkeit des Einspeicherns neuer Information
  • Möglichst geringe Redundanz und somit geringer Speicherplatzbedarf

Die Normalisierung der Daten stellt ein Verfahren dar, in dem die Datenredundanz auf Basis der funktionalen Abhängigkeiten stufenweise reduziert werden kann.

Um die Normalisierungsregeln anzuwenden benötigt man noch die Begriffe der
  • Funktionalen Abhängigkeit
  • Voll funktionalen Abhängigkeit
  • Transitiven Abhängigkeit

Funktionale Abhängigkeit

Funktional abhängig sind solche Attribute einer Relation, die sich in der realen Umwelt nicht unabhängig voneinander ändern können, ohne dass sich das davon abhängige Attribut mit ändert.

Beispiel:
In einer Relation
Student:
MatrikelnummerNameVornameStudiengangFachbereichStudienbeginn

sei folgender Sachverhalt gegeben: Zwei Studierende, die denselben Studiengang studieren, gehören automatisch demselben Fachbereich an (Studium der Medizin: Medizinische Fakultät oder Studium der Mathematik: Naturwissenschaftliche Fakultät).

Mit anderen Worten
  • der Fachbereich ergibt sich aus dem Studienfach, oder:
  • das Studienfach impliziert (determiniert) den Fachbereich
Definition:

Sei R eine Relation mit zwei Attributen a und b. Das Attribut b heißt von dem Attribut a funktional abhängig, a → b falls zu jedem Wert des Attributs a genau ein Wert des Attributs b gehört. Die funktionale Abhängigkeit wird durch einen Pfeil a → b („b ist funktional abhängig von a“) gekennzeichnet.

Volle funktionale Abhängigkeit

Definition:

In einer Relation R ist das Attribut A von den Attributen A1 und A2 voll funktional abhängig, wenn A von der Menge der Attribute {A1, A2} funktional abhängig ist, aber nicht von einem einzelnen Attribut A1 oder A2.

Das nächste Beispiel besitzt auf der linken Seite des Pfeils eine Attributmenge:
Beispiel:
Betrachtet wird eine Relation, die bei einem Vermittler für Ferienwohnungen in Griechenland die vermieteten Objekte und ihre Mieter verwaltet. Wohnungen werden dabei an einen Kunden immer grundsätzlich nur für eine oder mehrere Kalenderwochen von Samstag bis Samstag vermietet.

Ferienwohnungen:
KalenderwocheMietobjektKunde...

In dieser Relation ist folgende funktionale Abhängigkeit gegeben:
{ Kalenderwoche, Mietobjekt } → { Kunde } denn es gibt weder eine Abhängigkeit
{ Mietobjekt } → { Kunde } da dasselbe Mietobjekt – zu unterschiedlichen Zeiten – an verschiedene Kunden vermietet werden kann noch eine Abhängigkeit
{ Kalenderwoche } → { Kunde } da in einer Woche verschiedene Mietobjekte vermietet werden können.

Beispiel für volle funktionale Abhängigkeit:
Betrachten wir folgende Beispieldatenbank:

Projekte:
Projekt-NrProjektnameProjektbeschreibungProjektleite
5IKSSKostenschätzungHinz
3PCS7LeittechnikKunz
Angestellte:
Angest-NrNameVornameBerufAbteilungs-Nr
1MüllerGerdProgrammierer1
2HinzAntonPhysiker3
3KunzHugoProgrammierer2
4MeierAlfredProgrammierer12
5FischerWolfgangProgrammierer12
Projektmitarbeiter:
Angest-NrProjekt-NrArbeitszeit
1580
1320
25100
33100
5550
5350

Die Relation Projektmitarbeiter beschreibt, welche Angestellte in welchem Projekt mitarbeiten. Dabei kann ein Angestellter in mehreren Projekten mitarbeiten, das Attribut Arbeitszeit spiegelt den prozentualen Faktor wieder, den der Mitarbeiter pro Projekt mitarbeiten muss.

In Relation Projektmitarbeiter ist das Attribut „Arbeitszeit“ voll funktional abhängig von den Attributen „Projekt-Nr“ und „Angest-Nr“, da „Arbeitszeit“ weder von „Projekt-Nr“ noch von „Angest-Nr“ alleine funktional abhängig ist.

In der Praxis kann man die volle funktionale Abhängigkeit daran erkennen, dass in der Relation Projektmitarbeiter

  • gleiche Projektnummern mit unterschiedlichen (anteiligen) Arbeitszeiten vorkommen und
  • gleiche Angestelltennummern mit unterschiedlichen (anteiligen) Arbeitszeiten vorkommen

Transitive Abhängigkeit

Definition:

Wir betrachten eine Relation mit den Attributen A, A1 und A2. Man sagt, A2 ist von A transitiv abhängig, wenn A1 funktional von A abhängig ist (A jedoch nicht A1) und A2 funktional von A1 abhängig ist.

Beispiel:
Stammdaten:
Personal-NrNameVornameWohnortAbteilungs-NrAbteilungs-Name

In Relation Stammdaten ist Attribut „Abteilungs-Name“ transitiv vom Attribut „Personal-Nr“ abhängig, da die Abteilungsnummer von der Personalnummer funktional abhängig ist (und nicht umgekehrt: Die Personalnummer hängt nicht von der Abteilungsnummer ab) und der Abteilungsname von der Abteilungsnummer funktional abhängig ist.

Die Normalisierungsregeln

Unter Normalisierung versteht man das Aufteilen der Daten in Relationen in der Art und Weise, daß sie am Ende den Normalisierungsregeln entsprechen. In der Literatur sind bis heute mehr als fünf solcher Regeln zu finden, die aufeinander aufbauen:

  • Erste Normalform (1NF)
  • Zweite Normalform (2NF)
  • Dritte Normalform (3NF)
  • Boyce/Codd Normalform (BCNF)
  • Vierte Normalform (4NF)

In der Praxis spielen allerdings lediglich die ersten drei Normalformen sowie die Boyce/Codd’sche Normalform eine Rolle, da es vor allem bei großen komplexen Datenmengen sehr schwierig ist, selbst die ersten drei Normalisierungsschritte durchzuführen.

Erste Normalform

Definition:

Eine Relation ist in der ersten Normalform (1NF), wenn alle Attribute nur atomare Werte enthalten.

Mit anderen Worten: In einer 1NF-Relation ist an jedem Kreuzungspunkt von Attribut und Tupel nur ein Wert vorzufinden. Damit sind zum Beispiel Mengen und Arrays als Attributwerte ausgeschlossen.

Beispiel:
Artikel: Art-Nr Art-Bezeichnung Art-Art Lieferanten-Nr
Art-NrArt-BezeichnungArt-ArtLieferanten-Nr
1CRW 2240Laufwerk3416 2018 3439
2HP Laser JetDrucker3418
3Zip DriveLaufwerk3421 3244

Tabelle Artikel ist nicht in der ersten Normalform, da das Attribut „Lieferanten-Nr“ sog. Wiederholungsgruppen aufweist. Welche Probleme treten mit einer Tabelle wie Artikel auf?

  • Die Relation kann zwar nach Artikelnummern sortiert werden, nicht aber nach Lieferantennummern
  • Die einzelnen Tupel haben eine unterschiedliche Länge
  • Da das Attribut „Lieferanten-Nr“ unterschiedlich lang ist, ist es nicht ganz einfach, solche Attribute effizient abzuspeichern
  • Die Verarbeitung eines solchen Feldes gestaltet sich schwierig: Wir wird das Hinzufügen, Löschen oder Ändern einer solchen Lieferantennummer durchgeführt?
Beispiel:
Die folgende Tabelle erfüllt die 1NF:
Artikel:
Art-NrArt-BezeichnungArt-ArtLieferanten-Nr
1CRW 2240Laufwerk3416
1CRW 2240Laufwerk2018
1CRW 2240Laufwerk3439
2HP Laser JetDrucker3418
3Zip DriveLaufwerk3421
3Zip DriveLaufwerk3244

Zweite Normalform

Definition:

Eine Relation R mit Schlüssel S ist in der zweiten Normalform (2NF), wenn sie in der ersten 1NF ist und jedes Nicht-Schlüsselattribut voll funktional vom Schlüssel S abhängig ist.

Die Betonung liegt hier auf »voll«, d.h. es gibt kein Attribut, das schon von einem Teil des Schlüssels funktional abhängt.

Bemerkung:
Die zweite Normalform kann nur verletzt werden, wenn der Primärschlüssel aus mehr als einem Attribut besteht.

Beispiel:
Betrachten wir folgende Beispieldatenbank:
Beispiel_1NF:
Angest-NrNameAbt-NrAbt-NameProd-NummerProdukt-NameArbeitszeit
101Müller117Chemie113100Verdünner60
101Müller117Chemie113102Kali40

Die Relation enthält eine Reihe von Nicht-Schlüsselattributen, die funktional nicht vom Gesamtschlüssel, sondern nur von einzelnen Schlüsselteilen abhängig sind. So ist beispielsweise das Nicht-Schlüsselattribut „Produkt-Name“ nur vom Schlüsselattribut „Produkt-Nummer“ abhängig, nicht aber von Gesamtschlüssel {Angest-Nr, Produkt-Nummer}.

Eine Relation, die der zweiten Normalform entspricht, erhält man durch geeignetes Aufsplitten dieser Tabelle in mehrere einzelne Relationen:

Produkte:
Prod-NummerProdukt-Name
113100Verdünner
113102Kali
Produktentwicklungsplan:
Angest-NrProd-NummerArbeitszeit
10111310060
10111310240
Beispiel_2NF:
Angest-NrNameAbt-NrAbt-Name
101Müller117Chemie

Dritte Normalform

Definition:

Eine Relation ist in der 3NF, wenn sie sich in der 1NF und in der 2NF befindet und sie keine transitiven Abhängigkeiten aufweist, sprich die Nicht-Schlüsselattribute sind alle voll-funktional von den Schlüsselattributen direkt abhängig.

Beispiel:
Wir betrachten die Relation aus dem letzten Beispiel:
Beispiel_2NF:
Angest-NrNameAbt-NrAbt-Name
101Müller117Chemie

In diesem Beispiel ist das Attribut „Abt-Name“ transitiv vom Schlüssel „Angest-Nr“ abhängig. Durch Aufspalten dieser Relation in zwei Relationen Beispiel_3NF und Abteilungen erhält man zwei Relationen, die sich in der 3NF befinden:

Beispiel_3NF:
Angest-NrNameAbt-Nr
101Müller117
10111310240
Abteilungen:
Abt-NrAbt-Name
117Chemie

Zusammenfassung

Der Normalisierungsprozess 1NF, 2NF und 3NF erfordert folgende Aktionen, die an den Attributen der Entitäten vorgenommen werden müssen:

  • 1NF: Wiederholungsgruppen entfernen
  • 2NF: Alle Attribute entfernen, die nur von einigen der Primärattribute abhängen
  • 3NF: Alle von den Primärattributen transitiv abhängigen Attribute entfernen

Hinterlasse einen Kommentar

Ein Frosch der sich an der Seite festhält