Funktionale Abhängigkeiten bilden die Grundlage für die Normalisierung von Relationenschemata und 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.
Betrachtet man folgende Relationen, 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 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 Kunden benennen. Andersherum ist der Schluss nicht möglich. Ist der Nachname bekannt, 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 * 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 Determinante und schreibt: x → y.
Analog schreibt man also für die besprochene funktionale Abhängigkeit der Attribute idMitarbeiter -> Nachname, Vorname. Wichtig ist, dass die funktionale Abhängigkeit für alle möglichen bzw. denkbaren Tupel einer Relation gelten muss.
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 Primärschlüssel der Relation {IdMitarbeiter, Nachname , Vorname} würde sich aus den Attributen IdMitarbeiter und Nachname zusammensetzen. Es gilt also IdMitarbeiter, Nachname -> Vorname bzw. Vorname ist funktional von IdMitarbeiter und Nachname abhängig.
Allerdings ist Vorname nicht von Nachname funktional abhängig. Den Vornamen Claudia gilt sowohl für Schulze, als auch für Schrotter. Das Attribut IdMitarbeiter bestimmt aber nach wie vor eindeutig das Attribut Vorname. Auf das Attribut Nachname kann also im Schlüssel verzichtet werden. Das Nichtschlüssel-Attribut Vorname ist auch durch einen Teil des Primärschlüssels nämlich IdMitarbeiter bestimmbar.
Somit ist Vorname nicht voll funktional abhängig von IdMitarbeiter und Nachname. Die volle funktionale Abhängigkeit würde allerdings für das Attibut IdMitarbeiter gelten.
Angenommen wir haben eine Relation R mit den Attributen A,B und C. A ist der Primärschlüssel. A bestimmt B. B ist nicht Teil des Primärschlüssels. Dennoch gilt B->C. Somit ist C transitiv von A abhängig.
Mit Hilfe des Primärschlüssels IdMitarbeiter lässt sich eindeutig der Salon bestimmen in dem der Mitarbeiter arbeitet. Allerdings hängt der Salonname von der IdSalon ab und nur transitiv von IdMitarbeiter.
Um das Schema in die 3NF zu überführen, müssen Saloninformationen in eine eigene Relation ausgelagert werden.