Eine transitive Abhängigkeit in einer Datenbank ist eine indirekte Beziehung zwischen Werten in derselben Tabelle, die eine funktionale Abhängigkeit verursachen. Um den Normalisierungsstandard der dritten Normalform (3NF) zu erreichen, müssen Sie jegliche transitive Abhängigkeit beseitigen.
Eine transitive Abhängigkeit erfordert naturgemäß drei oder mehr Attribute (oder Datenbankspalten), zwischen denen eine funktionale Abhängigkeit besteht. Dies bedeutet, dass Spalte A in einer Tabelle über eine Zwischenspalte C auf Spalte B basiert.
Mal sehen, wie das funktionieren könnte.
Beispiel für eine transitive Abhängigkeit
AUTOREN
Author_ID | Autor | Buch | Autor_Nationalität |
---|---|---|---|
Auth_001 | Orson Scott Card | Enders Spiel | Vereinigte Staaten |
Auth_001 | Orson Scott Card | Enders Spiel | Vereinigte Staaten |
Auth_002 | Margaret Atwood | Die Geschichte der Dienstmagd | Kanada |
Im obigen AUTHORS-Beispiel:
- Buch → Autor : Hier die Buch Attribut bestimmt das Autor Attribut. Wenn Sie den Namen des Buches kennen, können Sie den Namen des Autors erfahren. Jedoch, Autor bestimmt nicht Buch , weil ein Autor mehrere Bücher schreiben kann. Nur weil wir den Namen des Autors Orson Scott Card kennen, kennen wir den Namen des Buches immer noch nicht.
- Autor → Autor_Nationalität : Ebenso die Autor Attribut bestimmt das Autor_Nationalität , aber nicht umgekehrt; Nur weil wir die Nationalität kennen, heißt das nicht, dass wir den Autor bestimmen können.
Diese Tabelle führt jedoch eine transitive Abhängigkeit ein:
- Buch → Autor_Nationalität: Wenn wir den Namen des Buches kennen, können wir die Nationalität über die Spalte Autor bestimmen.
Transitive Abhängigkeiten vermeiden
Um die dritte Normalform sicherzustellen, entfernen wir die transitive Abhängigkeit.
Wir können anfangen, die Buchspalte aus der Authors-Tabelle zu entfernen und eine separate Books-Tabelle zu erstellen:
BÜCHER
Book_ID | Buch | Author_ID |
---|---|---|
Book_001 | Enders Spiel | Auth_001 |
Book_001 | Kinder des Geistes | Auth_001 |
Book_002 | Die Geschichte der Dienstmagd | Auth_002 |
AUTOREN
Author_ID | Autor | Autor_Nationalität |
---|---|---|
Auth_001 | Orson Scott Card | Vereinigte Staaten |
Auth_002 | Margaret Atwood | Kanada |
Hat das Problem behoben? Untersuchen wir jetzt unsere Abhängigkeiten:
BÜCHER Tisch:
- Book_ID → Buch: Das Buch abhängig von der Book_ID .
- Es gibt keine weiteren Abhängigkeiten in dieser Tabelle, also sind wir in Ordnung. Beachten Sie, dass der Fremdschlüssel Author_ID Verknüpft diese Tabelle mit der AUTHORS-Tabelle über ihren Primärschlüssel Author_ID . Wir haben eine Beziehung erstellt, um eine transitive Abhängigkeit, ein Schlüsseldesign relationaler Datenbanken, zu vermeiden.
AUTHORS Tabelle:
- Author_ID → Autor: Das Autor abhängig von der Author_ID .
- Autor → Autor_Nationalität: Die Nationalität kann vom Autor bestimmt werden.
- Author_ID → Autor_Nationalität: Die Nationalität lässt sich aus dem Author_ID durch die 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 |
---|---|
Coun_001 | Vereinigte Staaten |
Coun_002 | Kanada |
AUTOREN
Author_ID | Autor | Country_ID |
---|---|---|
Auth_001 | Orson Scott Card | Coun_001 |
Auth_002 | Margaret Atwood | Coun_002 |
Jetzt haben wir drei Tabellen, die Fremdschlüssel verwenden, um die Tabellen miteinander zu verknüpfen:
- Der Fremdschlüssel der BOOK-Tabelle Author_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 keine Verknüpfung zu einer anderen Tabelle in diesem Entwurf erforderlich ist.
Warum transitive Abhängigkeiten ein fehlerhafter Datenbankentwurf sind
Welchen Wert hat das Vermeiden von transitiven Abhängigkeiten, um 3NF zu gewährleisten? Lassen Sie uns noch einmal unsere erste Tabelle betrachten und die Probleme sehen, die dadurch entstehen:
AUTOREN
Author_ID | Autor | Buch | Autor_Nationalität |
---|---|---|---|
Auth_001 | Orson Scott Card | Enders Spiel | Vereinigte Staaten |
Auth_001 | Orson Scott Card | Kinder des Geistes | Vereinigte Staaten |
Auth_002 | Margaret Atwood | Die Geschichte der Dienstmagd | Kanada |
Diese Art von Design kann zu Datenanomalien und Inkonsistenzen beitragen, zum Beispiel:
- Wenn Sie die beiden Bücher "Children of the Mind" und "Ender's Game" gelöscht haben, würden Sie den Autor "Orson Scott Card" und seine Nationalität vollständig 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 nicht veröffentlicht ist oder Sie den Namen eines Buches nicht kennen, das er verfasst hat?
- Wenn "Orson Scott Card" seine Staatsbürgerschaft geändert hat, müssen Sie sie in allen Datensätzen ändern, in denen er erscheint. Wenn Sie mehrere Datensätze mit demselben Autor haben, kann dies zu ungenauen Daten führen.
- Sie können ein Buch wie "The Handmaid's Tale" nicht löschen, ohne den Autor vollständig zu löschen.
Dies sind nur einige Gründe, warum Normalisierung und das Vermeiden von transitiven Abhängigkeiten Daten schützen und Konsistenz gewährleisten.