Was ist transitive Abhängigkeit in einer Datenbank?
Eine transitive Abhängigkeit in einer Datenbank ist eine indirekte Beziehung zwischen Werten in derselben Tabelle, die a funktionale Abhängigkeit. Um das zu erreichen Normalisierungsstandard der dritten Normalform (3NF), müssen Sie alle transitiven Abhängigkeiten beseitigen.
Eine transitive Abhängigkeit erfordert naturgemäß drei oder mehr Attribute (oder Datenbankspalten), die eine funktionale Abhängigkeit zwischen ihnen aufweisen, was bedeutet, dass Spalte A in einer Tabelle von Spalte B über eine Zwischenspalte C abhängt. Mal sehen, wie das funktionieren könnte.
Beispiel für eine transitive Abhängigkeit
AUTOREN
Autor_ID | Autor | Buch | Autor_Nationalität |
---|---|---|---|
Auth_001 | Orson Scott-Karte | Enders Spiel | Vereinigte Staaten |
Auth_001 | Orson Scott-Karte | Kinder des Geistes | Vereinigte Staaten |
Auth_002 | Margaret Atwood | Die Geschichte der Magd | Kanada |
Im obigen AUTOREN-Beispiel:
-
Buch → Autor:Hier das Buch Attribut bestimmt die Autor Attribut. Wenn Sie den Buchnamen kennen, können Sie den Namen des Autors erfahren. Jedoch,
- Autor → Autor_Nationalität: Ebenso die Autor Attribut bestimmt die Autor_Nationalität, aber nicht umgekehrt – nur weil wir die Nationalität des Autors kennen, heißt das nicht, dass wir den Autor bestimmen können.
Aber diese Tabelle führt eine transitive Abhängigkeit ein:
- Buch →Autor_Nationalität: Wenn wir den Buchnamen kennen, können wir über die Spalte Autor die Nationalität des Autors ermitteln.
Transitive Abhängigkeiten vermeiden
Um die dritte Normalform sicherzustellen, entfernen wir die transitive Abhängigkeit.
Wir können damit beginnen, indem wir die Buchspalte aus der Autorentabelle entfernen und eine separate Büchertabelle erstellen:
BÜCHER
Buch_ID | Buch | Autor_ID |
---|---|---|
Buch_001 | Enders Spiel | Auth_001 |
Buch_001 | Kinder des Geistes | Auth_001 |
Buch_002 | Die Geschichte der Magd | Auth_002 |
AUTOREN
Autor_ID | Autor | Autor_Nationalität |
---|---|---|
Auth_001 | Orson Scott-Karte | Vereinigte Staaten |
Auth_002 | Margaret Atwood | Kanada |
Hat das behoben? Untersuchen wir unsere Abhängigkeiten jetzt:
BÜCHER-Tisch:
- Buch_ID → Buch:Die Buch abhängig von der Buch_ID.
- Es gibt keine anderen Abhängigkeiten in dieser Tabelle, also sind wir in Ordnung. Beachten Sie, dass der Fremdschlüssel, Autor_ID, verknüpft diese Tabelle über ihren Primärschlüssel mit der Tabelle AUTHORS, Autor_ID. Wir haben eine Beziehung geschaffen, um eine transitive Abhängigkeit zu vermeiden, ein Schlüsseldesign von relationale Datenbanken.
AUTOREN-Tabelle:
- Autor_ID → Autor: Die Autor abhängig von der Autor_ID.
- Autor → Autor_Nationalität:Die Nationalität kann vom Autor bestimmt werden.
- Autor_ID → Autor_Nationalität: Die Staatsangehörigkeit kann aus den Autor_ID durch das Autor Attribut. Wir haben immer noch eine transitive Abhängigkeit.
Wir müssen eine dritte Tabelle hinzufügen, um diese Daten zu normalisieren:
LÄNDER
Country_ID | Land |
---|---|
Land_001 | Vereinigte Staaten |
Land_002 | Kanada |
AUTOREN
Autor_ID | Autor | Country_ID |
---|---|---|
Auth_001 | Orson Scott-Karte | Land_001 |
Auth_002 | Margaret Atwood | Land_002 |
Jetzt haben wir drei Tabellen, die von fremde Schlüssel um zwischen den Tabellen zu verlinken:
- Der Fremdschlüssel der BOOK-Tabelle, Autor_ID, verknüpft ein Buch mit einem Autor in der Tabelle AUTHORS.
- Der Fremdschlüssel der Tabelle AUTHORS, Country_ID, verknüpft einen Autor mit einem Land in der Tabelle COUNTRIES.
- Die Tabelle COUNTRIES hat keinen Fremdschlüssel, da in diesem Design keine Verknüpfung mit einer anderen Tabelle erforderlich ist.
Warum transitive Abhängigkeiten ein schlechtes Datenbankdesign sind
Welchen Wert hat es, transitive Abhängigkeiten zu vermeiden, um 3NF sicherzustellen? Betrachten wir unsere erste Tabelle noch einmal und sehen wir uns die Probleme an, die sie verursacht:
AUTOREN
Autor_ID | Autor | Buch | Autor_Nationalität |
---|---|---|---|
Auth_001 | Orson Scott-Karte | Enders Spiel | Vereinigte Staaten |
Auth_001 | Orson Scott-Karte | Kinder des Geistes | Vereinigte Staaten |
Auth_002 | Margaret Atwood | Die Geschichte der Magd | Kanada |
Diese Art von Design kann zu Datenanomalien und Inkonsistenzen beitragen, zum Beispiel:
- Wenn Sie die beiden Bücher gelöscht haben Kinder des Geistes und Enders Spiel, würden Sie den Autor "Orson Scott Card" und seine Nationalität komplett aus der Datenbank löschen.
- Sie können der Datenbank keinen neuen Autor hinzufügen, es sei denn, Sie fügen auch ein Buch hinzu. Was ist, wenn der Autor noch unveröffentlicht ist oder Sie den Namen eines von ihm verfassten Buches nicht kennen?
- Wenn "Orson Scott Card" seine Staatsbürgerschaft geändert hat, müssten Sie seine Staatsbürgerschaft in allen Aufzeichnungen ändern, in denen er auftaucht. Mehrere Datensätze mit demselben Autor können zu ungenauen Daten führen. Was ist, wenn die Dateneingabeperson nicht erkennt, dass für eine Person mehrere Datensätze vorhanden sind, und die Daten nur in einem Datensatz ändert?
- Sie können ein Buch wie. nicht löschen Die Geschichte der Magd ohne auch den Autor komplett zu löschen.
Häufig gestellte Fragen
- Welche Arten von Abhängigkeiten gibt es in einem Datenbankverwaltungssystem? Es gibt vier Arten von Datenbankabhängigkeiten: triviale funktionale Abhängigkeiten, vollständige funktionale Abhängigkeiten, transitive Abhängigkeiten und mehrwertige Abhängigkeiten.
- Wie unterscheidet sich die funktionale Abhängigkeit von der transitiven Abhängigkeit? In der Datenbankverwaltung ist Abhängigkeit eine Beziehung zwischen zwei oder mehr Attributen (Spalten). Während die funktionale Abhängigkeit eine Assoziation zwischen zwei Attributen derselben Beziehung ist, tritt eine transitive Abhängigkeit auf, wenn eine indirekte Beziehung eine funktionale Abhängigkeit verursacht.