Funktionale Abhängigkeit

Version vom 16. April 2026, 14:27 Uhr von Flbkwikiadmin (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „== Einführung == '''Funktionale Abhängigkeiten''' bilden die Grundlage für die Normalisierung von Relationenschemata und die Bestimmung von Primärschlüsseln. Relationen werden durch Attribute definiert. Bestimmen einige dieser Attribute eindeutig die Werte anderer Attribute, so spricht man von funktionaler Abhängigkeit. == Funktionale Abhängigkeit == Betrachtet man folgende Relation, wird man festste…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Einführung

Funktionale Abhängigkeiten bilden die Grundlage für die Normalisierung von Relationenschemata und die Bestimmung von Primärschlüsseln. Relationen werden durch Attribute definiert. Bestimmen einige dieser Attribute eindeutig die Werte anderer Attribute, so spricht man von funktionaler Abhängigkeit.

Funktionale Abhängigkeit

Betrachtet man folgende Relation, wird man feststellen, dass die Attribute Nachname und Vorname abhängig sind von der IdMitarbeiter. Man sagt in diesem Zusammenhang, die Attribute Nachname und Vorname sind funktional abhängig von der IdMitarbeiter.

IdMitarbeiter Nachname Vorname
1 Krause Sabine
2 Schrotter Claudia
3 Hermann Markus
4 Krause Christoph
5 Bitter Manuel
6 Schulze Claudia

Wenn man also die `IdMitarbeiter` kennt, kann man auch den Namen des Mitarbeiters benennen. Andersherum ist der Schluss nicht möglich: Ist der Nachname bekannt (z. B. Krause), lässt sich die `IdMitarbeiter` nicht eindeutig bestimmen.

In Anlehnung an die Mathematik wird hier von der funktionalen Abhängigkeit gesprochen, da eine mathematische Funktion immer den gleichen Ausgabewert bei gleichen Eingabewerten liefert. Die Funktion \({ y = 3 \cdot x }\) liefert für \({ x = 4 }\) immer die Ausgabe \(12\) für die Variable \(y\). Für jede beliebige Zahl, die man für die Variable \(x\) einsetzt, ergibt sich also ein ganz bestimmter Wert für \(y\). Man kann sagen, dass der Wert \(y\) abhängig ist vom Wert \(x\) bzw. \(x\) bestimmt \(y\).

Mathematisch spricht man auch von einer Determinante und schreibt: \({ x \rightarrow y }\)

Analog schreibt man also für die besprochene funktionale Abhängigkeit der Attribute: \({ \text{IdMitarbeiter} \rightarrow \text{Nachname}, \text{Vorname} }\)

> Wichtig: Die funktionale Abhängigkeit muss für alle möglichen bzw. denkbaren Tupel (Datensätze) einer Relation gelten.

Volle funktionale Abhängigkeit

Man spricht von voller funktionaler Abhängigkeit, wenn jedes Nichtschlüssel-Attribut nur durch den gesamten Primärschlüssel eindeutig bestimmt werden kann.

Nehmen wir an, der zusammengesetzte Primärschlüssel der obigen Relation würde sich aus den Attributen `IdMitarbeiter` und `Nachname` zusammensetzen. Es gälte also: \({ (\text{IdMitarbeiter}, \text{Nachname}) \rightarrow \text{Vorname} }\) (Vorname ist funktional von IdMitarbeiter und Nachname abhängig.)

Allerdings ist der Vorname nicht vom Nachnamen funktional abhängig. Der Vorname „Claudia“ gilt sowohl für Schulze als auch für Schrotter. Das Attribut `IdMitarbeiter` bestimmt aber nach wie vor alleine und eindeutig das Attribut `Vorname`. Auf das Attribut `Nachname` kann also im Schlüssel verzichtet werden.

Da das Nichtschlüssel-Attribut `Vorname` auch durch einen Teil des Primärschlüssels – nämlich `IdMitarbeiter` – bestimmbar ist, ist `Vorname` nicht voll funktional abhängig von der Kombination aus IdMitarbeiter und Nachname. Die volle funktionale Abhängigkeit würde hier nur für das isolierte Attribut `IdMitarbeiter` gelten.

Transitive Abhängigkeit

Angenommen, wir haben eine Relation \(R\) mit den Attributen \(A\), \(B\) und \(C\).

  • \(A\) ist der Primärschlüssel.
  • \(A\) bestimmt \(B\) (\({ A \rightarrow B }\)).
  • \(B\) ist nicht Teil des Primärschlüssels.
  • Dennoch gilt \({ B \rightarrow C }\).

Somit ist \(C\) transitiv von \(A\) abhängig.

Beispiel aus der Praxis: Mit Hilfe des Primärschlüssels `IdMitarbeiter` lässt sich eindeutig der Salon bestimmen, in dem der Mitarbeiter arbeitet. Allerdings hängt der Salonname funktional von der `IdSalon` ab und somit nur transitiv von der `IdMitarbeiter`.

Um ein solches Schema in die 3. Normalform (3NF) zu überführen, müssen die Saloninformationen in eine eigene Relation ausgelagert werden.