dns Normalisierung von Datenbanken

Schlüssel und Abhängigkeiten

Bevor wir zu den zwei weiteren Normalformen gelangen, ist es zunächst erforderlich, einige Begrifflichkeiten zu verstehen, darunter die verschiedenen Schlüssel und Abhängigkeiten.

Schlüsselkandidaten und Primärschlüssel

Je nach Definition gehört es schon zur 1NF, einen Primärschlüssel zu erstellen chat_bubble_outline . Dieser dient der eindeutigen Identifizierung eines Eintrages der Tabelle. Spätestens bei der zweiten Normalform sollte man sich das Konzept von Primär- und Fremdschlüsseln zu eigen gemacht haben.

Um diese Beispiel nutzen zu können, gehen wir vereinfacht davon aus, dass Kennzeichen und Auto fest zusammenhängen. Wenn ein Auto also einmal ein Kennzeichen bekommen hat, ändert sich dies nicht mehr und auch, wenn das Auto schon verschrottet wurde, wird das Kennzeichen nicht anderweitig vergeben.

Zunächst bestimmen wir die verschiedenen Schlüsselkandidaten.

priority_high Schlüsselkandidat

Ein Schlüsselkandidat ist eine minimale Menge von Attributen, mit denen jeder Eintrag in einer Datenbanktabelle eindeutig identifiziert werden kann. chat_bubble_outline

Dabei ist nicht nur von den tatsächlich vorliegenden Werten auszugehen, sondern von allen weiteren denkbaren Einträgen. Man könnte auf die Idee kommen, dass die D-Nr. schon als Primärschlüssel ausreicht, da sie in der Tabelle immer eindeutig ist. Allerdings ist dies die ID für die Dienstleistungen, die vorgenommen werden sollen. Soll also bei einem zweiten Auto ein Ölwechsel vorgenommen werden, ist das Feld nicht mehr eindeutig. Man erkennt schnell: Zum Identifizieren der Schlüsselkandidaten benötigt man genaue Kenntnisse der Umstände.

In der Praxis ist es ein häufiges Vorgehen, einen künstlichen Schlüssel hinzuzufügen, der etwa eine aufsteigende Nummerierung der Einträge enthält. chat_bubble_outline In unserem Beispiel ist dieses Vorgehen allerdings nicht notwendig.

Mögliche Schlüsselkandidaten sind:

  • Datum, Kennzeichen, D-Nr.
  • Datum, Kennzeichen, Dienstleistung
  • Datum, Kennzeichen, Auftrag, Beendet

Hat man alle Schlüsselkandidaten identifiziert, liegt es an der Person, welche die Datenbank normalisiert, sich für einen Primärschlüssel zu entscheiden. Dies kann nach subjektiven Kriterien geschehen, allerdings sollte man einen möglichst kleinen Schlüssel wählen, dessen Attribute sich möglichst nicht mehr ändern sollten. chat_bubble_outline

priority_high Primärschlüssel

Der Primärschlüssel einer Tabelle ist ein beliebig gewählter Schlüsselkandidat. chat_bubble_outline

In diesem Fall entscheiden wir uns für die Kombination Datum, Kennzeichen und D-Nr. Die Überschriften aller Attribute, die Teil des Primärschlüssels sind, werden in der Regel unterstrichen dargestellt. chat_bubble_outline

Tabelle: Aufträge

Datum Kennzeichen Automarke Modell KdNr. Kunde MNr. Mechaniker DNr. Dienstleistungen Beendet
16.3.2018 MK:KI 163 Volvo 850 K101 Kiwits M01 Meinecke D801 Scheinwerfer reparieren Ja
16.3.2018 MK:KI 163 Volvo 850 K101 Kiwits M01 Meinecke D401 Bremsen kontrollieren Ja
4.5.2018 MS:KU 458 Ford Mondeo K102 Kurze M02 Münz D106 Ausbeulen Ja
5.5.2018 DO:KL 558 VW Golf K103 Klein M02 Münz D408 Batterie wechseln Nein
8.6.2018 MK:KI 163 Volvo 750 K101 Kiwits M03 Maler D402 Bremsen erneuern Nein
9.6.2018 MK:KL 96 Opel Astra K103 Klein M03 Maler D002 Ölwechsel Nein

Attribute, die zu keinem Schlüsselkandidaten gehören, werden auch Nichtschlüsselattribute genannt. chat_bubble_outline

Funktionale und transitive Abhängigkeit

Zur Überprüfung der zweiten und dritten Normalform untersucht man die Abhängigkeiten der Werte zueinander.

priority_high Funktionale Abhängigkeit

Eine Attributmenge A ist funktional abhängig von einer Attributmenge B, wenn jedem Wert von B genau ein Wert von A zugeordnet werden kann. chat_bubble_outline chat_bubble_outline

Folgende Beispiele für funktionale Abhängigkeiten sind in der Tabelle zu finden:

  • Der Kunde ist funktional abhängig vom Kennzeichen.
  • Die Dienstleistung ist funktional abhängig von der D-Nr.
  • Das Modell ist funktional abhängig von der Automarke.
  • Der Mechaniker ist funktional abhängig von Datum und Kennzeichen.
  • Der Mechaniker ist funktional abhängig von Datum, Kennzeichen und Automarke.
priority_high Vollfunktionale Abhängigkeit

Eine Attributmenge A ist vollfunktional abhängig von eine Attributmenge B, wenn A funktional abhängig ist von B, jedoch nicht von einer Teilmenge von B. chat_bubble_outline

Wir hatten bereits festgestellt, dass der Mechaniker funktional abhängig ist von Datum, Kennzeichen und Automarke. Jedoch ist diese Abhängigkeit nicht vollfunktional, weil eine Teilmenge existiert von der der Mechaniker abhängig ist – nämlich Datum und Kennzeichen. Von dieser Menge wiederum könnte man kein Attribut entfernen, ohne die funktionale Abhängigkeit zu verlieren. Somit gilt: Der Mechaniker ist vollfunktional abhängig von Datum und Kennzeichen. Mit diesen Definitionen schreiten wir nun weiter zur zweiten Normalform.

chevron_right Zweite Normalform