Informatik

Funktionale Abhängigkeiten

Bevor man eine Tabelle zerlegen kann, muss man wissen, welche Angabe von welcher abhängt. Genau das beschreibt eine funktionale Abhängigkeit.

Die Ausgangstabelle

Wir arbeiten mit der unnormalisierten Auftrittsliste aus Kapitel 1:

Ihr Schema:

auftrittsliste(band, herkunftsland, genres, buehne, buehnen_kapazitaet, datum, beginn, dauer_min)

Der Begriff

Ein Attribut B ist funktional abhängig von einer Attributmenge A, wenn zu jedem Wert von A höchstens ein Wert von B gehört.

Man schreibt A → B und sagt: „A bestimmt B."

Die Betonung liegt auf höchstens einem: Wenn ich A kenne, kenne ich B – ohne nachsehen zu müssen, um welche Zeile es geht.

In der Auftrittsliste gilt band → herkunftsland.

Prüfen kann man das so: Suche zwei Zeilen mit demselben Bandnamen und verschiedenem Herkunftsland. Findest du keine – und kann es aus inhaltlichen Gründen keine geben –, gilt die Abhängigkeit.

Umgekehrt gilt herkunftsland → band nicht: Zu Deutschland gehören 15 verschiedene Bands.

Beide Abfragen liefern kein Ergebnis. Das ist ein Hinweis darauf, dass die Abhängigkeiten gelten – aber kein Beweis.

Eine funktionale Abhängigkeit ist eine Aussage über alle möglichen Daten, nicht über die gerade vorhandenen. Die Daten können sie widerlegen (ein Gegenbeispiel genügt), aber nie beweisen. Begründen muss man sie inhaltlich: Eine Band hat nun einmal genau ein Herkunftsland.

Abhängigkeiten von zusammengesetzten Attributmengen

Links vom Pfeil dürfen mehrere Attribute stehen.

a) Was bestimmt in der Auftrittsliste eine einzelne Zeile eindeutig? Anders gefragt: Welche Attributmenge ist ein Schlüsselkandidat?

b) Prüfe deinen Vorschlag mit einer Abfrage.

c) Schreibe alle funktionalen Abhängigkeiten auf, die du in der Tabelle findest.

Tipp 1: Womit fange ich an?

Eine Zeile beschreibt einen Auftritt. Was macht einen Auftritt eindeutig? Nicht die Band allein – manche treten mehrfach auf. Nicht der Zeitpunkt allein – gleichzeitig laufen mehrere Auftritte.

Tipp 2: So prüfst du einen Schlüsselkandidaten
SELECT a, b, c, COUNT(*)
  FROM auftrittsliste
 GROUP BY a, b, c
HAVING COUNT(*) > 1;

Liefert das nichts, kommt keine Kombination doppelt vor.

Lösung. Erfrage das Passwort bei deiner Lehrkraft.

Volle und partielle Abhängigkeit

Ist eine Attributmenge A zusammengesetzt, unterscheidet man:

  • B ist voll funktional abhängig von A, wenn B von A abhängt, aber von keiner echten Teilmenge von A.
  • B ist partiell abhängig von A, wenn schon ein Teil von A ausreicht, um B zu bestimmen.

Der Primärschlüssel ist band, datum, beginn.

  • dauer_min ist voll abhängig: Man braucht alle drei Angaben. Weder die Band allein noch das Datum allein legt die Dauer fest.
  • herkunftsland ist partiell abhängig: Schon band allein genügt. Die anderen beiden Schlüsselteile sind überflüssig.

Diese Unterscheidung ist der Kern der 2. Normalform.

Ordne jedes Attribut der Auftrittsliste ein: voll oder partiell abhängig vom Primärschlüssel band, datum, beginn?

herkunftsland, genres, buehne, buehnen_kapazitaet, dauer_min

Lösung. Erfrage das Passwort bei deiner Lehrkraft.

Die drei Fälle im Überblick

Fall Muster Wird beseitigt durch
Mehrere Werte in einer Zelle genres = 'Indie, Rock' 1. Normalform
Partielle Abhängigkeit vom Schlüssel band → herkunftsland 2. Normalform
Transitive Abhängigkeit über ein Nichtschlüsselattribut buehne → buehnen_kapazitaet 3. Normalform

Die Auftrittsliste enthält alle drei – deshalb eignet sie sich so gut zum Üben.


Selbsttest

Funktionale Abhängigkeiten

Teilbare URL erstellen

Abschnitte auswählen