Funktionale Abhängigkeiten (FA) sind ein Konzept der relationalen Entwurfstheorie und bilden die Grundlage für die Normalisierung von Relationenschemata.

Eine Relation wird durch Attribute definiert. Bestimmen einige dieser Attribute eindeutig die Werte anderer Attribute, so spricht man von funktionaler Abhängigkeit. So könnte man sich etwa eine Kundendatenbank vorstellen, in der die Anschrift und die Telefonnummer eines Kunden eindeutig durch seinen Namen zusammen mit seinem Geburtsdatum bestimmt sind. Hier wären also Anschrift und Telefonnummer funktional abhängig von Name und Geburtsdatum.

Mit Hilfe funktionaler Abhängigkeiten lässt sich auch der Begriff Schlüssel definieren:

Bestimmen einige Attribute einer Relation eindeutig die Werte aller Attribute der Relation, so spricht man von einem Superschlüssel, das heißt, jedes Tupel dieser Relation ist eindeutig durch die Werte dieser Attribute bestimmt. Zum Beispiel könnte man eine Kundennummer einführen, die jeden Kunden identifiziert. Ein Schlüsselkandidat ist ein minimaler Superschlüssel, das heißt, keine echte Teilmenge der Attribute dieses Schlüssels bestimmt vollständig die Werte aller anderen Attribute der Relation. Unter allen Schlüsselkandidaten einer Relation wird ein sogenannter Primärschlüssel ausgewählt.

Beispiel:

A B C
1 1 3
1 1 3
1 2 4
2 3 5
3 3 6

In diesem Beispiel ist C funktional abhängig von A und B, geschrieben A, B → C. Der Pfeil kann somit gelesen werden als „bestimmt eindeutig“: Die ersten beiden Attribute zusammen bestimmen eindeutig, welchen Wert Attribut C hat. Anders ausgedrückt: Ist bekannt, welche Werte die ersten beiden Attribute haben, ist damit auch der Wert des letzten Attributes bestimmt. Aus A oder B alleine lässt sich in diesem Beispiel hingegen nicht jeder Wert von C eindeutig herleiten.

Formale Definition Bearbeiten

Sei   eine Relation mit dem Relationenschema   und seien   und   Teilmengen von Attributen von  . Sei   ein Tupel aus  . Dann ist   die Einschränkung von   auf die Attribute aus  . Die funktionale Abhängigkeit   (  ist funktional abhängig von  ) gilt auf  , wenn für jede zulässige Relation   gilt:

 

Das heißt, für alle Tupel   mit gleichen  -Attributen ( ) gilt auch, dass ihre  -Attribute gleich sind ( ). Die Werte der Attribute aus der Attributmenge   bestimmen also eindeutig die Werte der Attribute aus der Attributmenge  ;   wird in der Literatur auch als Determinante für   bezeichnet. Für Attributmengen schreibt man üblicherweise kurz   statt  .

  heißt voll funktional abhängig von  , wenn aus   kein Attribut entfernt werden kann, so dass die Bedingung immer noch gilt.

Im Beispiel oben spielt das Attribut   für die Bestimmung von   keine Rolle:

Aus der funktionalen Abhängigkeit   lässt sich die volle funktionale Abhängigkeit   gewinnen.

Axiome von Armstrong Bearbeiten

Mit Hilfe der Axiome von Armstrong (auch Armstrong-Axiome) lassen sich aus einer Menge von funktionalen Abhängigkeiten, die auf einer Relation gelten, weitere funktionale Abhängigkeiten ableiten. Die folgenden drei Regeln reichen aus, um alle funktionalen Abhängigkeiten herzuleiten:

1. Eine Menge von Attributen bestimmt eindeutig die Werte einer Teilmenge dieser Attribute (triviale Abhängigkeit), das heißt,  . (Reflexivität)

2. Gilt  , so gilt auch   für jede Menge von Attributen   der Relation. (Erweiterungsregel, Verstärkung)

3. Gilt   und  , so gilt auch  . (Transitivitätsregel)

Um Herleitungen einfacher zu gestalten, können zusätzlich die folgenden (abgeleiteten) Regeln verwendet werden:

4. Gelten   und  , so gilt auch  . (Vereinigungsregel)

5. Gilt  , so gelten auch   und  . (Dekompositions-/Zerlegungsregel)

6. Gilt   und  , so gilt auch  . (Pseudotransitivitätsregel)

Normalisierung mit funktionalen Abhängigkeiten Bearbeiten

Mit Hilfe von funktionalen Abhängigkeiten lassen sich Relationenschemata normalisieren. Ein Relationenschema   ist zum Beispiel in Boyce-Codd-Normalform, wenn für alle funktionalen Abhängigkeiten  , die auf   gelten, gilt: Die funktionale Abhängigkeit ist trivial oder   ist ein Superschlüssel für  . Die 3. Normalform ist etwas abgeschwächt. Für sie muss eine der oben angegebenen Bedingungen gelten oder dass alle Attribute aus   in mindestens einem der Schlüsselkandidaten von   enthalten sind.

Es gibt Algorithmen, die ein Relationenschema auf der Grundlage funktionaler Abhängigkeiten in normalisierte Schemata zerlegen. Ziel einer solchen Zerlegung ist Verlustlosigkeit und Abhängigkeitstreue (auch Abhängigkeitsbewahrung) der Zerlegung. Abhängigkeitstreue bedeutet, dass alle funktionalen Abhängigkeiten die auf der ursprünglichen Relation gelten, auch auf der Zerlegung noch gelten. Ein solcher Algorithmus, der in die dritte Normalform transferiert, ist der Synthesealgorithmus. Die Verlustlosigkeit einer Zerlegung in zwei Teilrelationen lässt sich mit Hilfe des Satzes von Delobel nachweisen.

Attributhülle Bearbeiten

Die Attributhülle   eines bestimmten Attributs   ist eine Menge aller Attribute, die von   funktional abhängen. Im kleinsten Fall ist die Attributhülle nur das Attribut selbst, da keine anderen Attribute von ihm abhängen. Will man die Attributhülle eines Attributs bei einer gegebenen Anzahl funktionaler Abhängigkeiten F bestimmen, kann man einen einfachen Algorithmus anwenden, der durch wiederholte Anwendung der Transitivitätsregel die Menge der abhängigen Attribute bestimmt. Der Algorithmus ist wie folgt definiert:

Eingabe:

  • eine Menge funktionaler Abhängigkeiten  
  • eine Menge von Attributen  

Ausgabe:

  • die vollständige Menge der Attribute   die sich aus   durch die Abhängigkeiten   ableiten lässt. Es gilt  .

 Hülle 
    
   while( Änderung an  ) do
      foreach( Abhängigkeit  ) do
        if ( then  

Angewendet auf eine konkrete Menge an funktionalen Abhängigkeiten F:

  • F hat die Abhängigkeiten:
    •  
    •  
    •  
    •  
  • Wir wollen die Attributhülle für   bestimmen.

1.  

2. Durchlaufen der funktionalen Abhängigkeiten von oben nach unten:

    •   ist keine Teilmenge von  
    •   ist keine Teilmenge von  
    •   ist Teilmenge von  
      •  
    •   ist Teilmenge von  
      •  
    • Neuer Durchlauf:
    •   ist Teilmenge von  
      •  
    • ...danach ändert sich nichts mehr an der Menge  

Abgeschlossene Hülle Bearbeiten

Intuitiv gesprochen ist die abgeschlossene Hülle einer Menge von funktionalen Abhängigkeiten die Menge der Attribute, die durch die „linken Seiten“ der Abhängigkeiten bestimmt ist.

Ist F ={α1 → β1,...,αn → βn} eine Menge von funktionalen Abhängigkeiten, so ist die abgeschlossene Hülle oder Attributhülle die Menge

 

und wird mit   bezeichnet. Für die Hülle gilt:

 

Weiterführende Konzepte Bearbeiten

  • Mehrwertige Abhängigkeiten bilden eine Erweiterung der Funktionalen Abhängigkeiten, die es ermöglichen, zusätzliche Anomalien in einem relationalen Schema aufzudecken.
  • Konditionale Abhängigkeiten (engl. Conditional Functional Dependencies) bilden eine Erweiterung der Funktionalen Abhängigkeiten um konkrete Wertetabellen. Eine Abhängigkeit wie zum Beispiel PLZOrt wird um eine zusätzliche Tabelle mit konkreten Werten wie zum Beispiel 80001München erweitert. Der Postleitzahl 80001 wird der Ort München direkt zugeordnet. Mit Hilfe dieser konditionalen Abhängigkeiten lässt sich die Qualität von Daten messen, bzw. es lassen sich Maßnahmen zur Verbesserung der Datenqualität ableiten.

Siehe auch Bearbeiten

Literatur Bearbeiten

  • Alfons Kemper, André Eickler: Datenbanksysteme. Eine Einführung. Oldenbourg, München 2004, ISBN 3-486-27392-2.
  • Philip Bohannon, Fan Wenfei, Floris Geerts, Jia Xibei, Anastasios Kementsietsidis: Conditional Functional Dependencies for Data Cleaning. IEEE Service Center, Piscataway NJ 2007.

Weblinks Bearbeiten