Une dépendance transitive dans une base de données est une relation indirecte entre les valeurs d'une même table qui entraîne une dépendance fonctionnelle. Pour atteindre la norme de normalisation de la troisième forme normale (3NF), vous devez éliminer toute dépendance transitive.
De par sa nature, une dépendance transitive nécessite au moins trois attributs (ou colonnes de base de données) ayant une dépendance fonctionnelle entre eux, ce qui signifie que la colonne A d'une table s'appuie sur la colonne B via une colonne C intermédiaire.
Voyons comment cela pourrait fonctionner.
Exemple de dépendance transitive
AUTEURS
Author_ID | Auteur | Livre | Auteur_nationalité |
---|---|---|---|
Auth_001 | Orson Scott Card | le match de Ender | États Unis |
Auth_001 | Orson Scott Card | le match de Ender | États Unis |
Auth_002 | Margaret Atwood | Le conte de la servante | Canada |
Dans l'exemple AUTEURS ci-dessus:
- Livre → Auteur : Ici le Livre attribut détermine la Auteur attribut. Si vous connaissez le nom du livre, vous pouvez apprendre le nom de l'auteur. cependant, Auteur ne détermine pas Livre , car un auteur peut écrire plusieurs livres. Par exemple, juste parce que nous connaissons le nom de l'auteur, Orson Scott Card, nous ne connaissons toujours pas le nom du livre.
- Auteur → Auteur_nationalité : De même, le Auteur attribut détermine la Auteur_nationalité , mais pas l’inverse; ce n'est pas parce que nous connaissons la nationalité que nous pouvons déterminer l'auteur.
Mais ce tableau introduit une dépendance transitive:
- Livre → Author_Nationality: Si nous connaissons le nom du livre, nous pouvons déterminer la nationalité via la colonne Auteur.
Éviter les dépendances transitives
Pour assurer la troisième forme normale, supprimons la dépendance transitive.
Nous pouvons commencer par supprimer la colonne Livre de la table des auteurs et créer un tableau séparé:
LIVRES
Book_ID | Livre | Author_ID |
---|---|---|
Livre_001 | le match de Ender | Auth_001 |
Livre_001 | Enfants de l'esprit | Auth_001 |
Book_002 | Le conte de la servante | Auth_002 |
AUTEURS
Author_ID | Auteur | Auteur_nationalité |
---|---|---|
Auth_001 | Orson Scott Card | États Unis |
Auth_002 | Margaret Atwood | Canada |
Est-ce que cela a résolu le problème? Examinons maintenant nos dépendances:
LIVRES:
- Book_ID → Livre: le Livre Depend de Book_ID .
- Aucune autre dépendance dans cette table n'existe, nous allons donc bien. Notez que la clé étrangère Author_ID lie cette table à la table AUTHORS via sa clé primaire Author_ID . Nous avons créé une relation pour éviter une dépendance transitive, une conception clé de bases de données relationnelles.
Table AUTEURS:
- Author_ID → Auteur: le Auteur Depend de Author_ID .
- Auteur → Author_Nationality: La nationalité peut être déterminée par l'auteur.
- Author_ID → Author_Nationality: La nationalité peut être déterminée à partir du Author_ID à travers le Auteur attribut. Nous avons toujours une dépendance transitive.
Nous devons ajouter une troisième table pour normaliser ces données:
DES PAYS
Country_ID | Pays |
---|---|
Coun_001 | États Unis |
Coun_002 | Canada |
AUTEURS
Author_ID | Auteur | Country_ID |
---|---|---|
Auth_001 | Orson Scott Card | Coun_001 |
Auth_002 | Margaret Atwood | Coun_002 |
Nous avons maintenant trois tables, utilisant des clés étrangères pour faire le lien entre les tables:
- La clé étrangère de la table BOOK Author_ID lie un livre à un auteur de la table AUTHORS.
- Clé étrangère de la table AUTHORS Country_ID lie un auteur à un pays dans la table COUNTRIES.
- La table COUNTRIES n'a pas de clé étrangère car elle n'a pas besoin d'être liée à une autre table de cette conception.
Pourquoi les dépendances transitives sont une mauvaise conception de base de données
Quelle est la valeur d’éviter les dépendances transitives pour assurer la 3NF? Reprenons notre première table et voyons les problèmes qu’elle crée:
AUTEURS
Author_ID | Auteur | Livre | Auteur_nationalité |
---|---|---|---|
Auth_001 | Orson Scott Card | le match de Ender | États Unis |
Auth_001 | Orson Scott Card | Enfants de l'esprit | États Unis |
Auth_002 | Margaret Atwood | Le conte de la servante | Canada |
Ce type de conception peut contribuer à des anomalies et des incohérences dans les données, par exemple:
- Si vous supprimez les deux livres "Children of the Mind" et "Ender's Game", vous supprimez complètement l'auteur "Orson Scott Card" et sa nationalité de la base de données.
- Vous ne pouvez pas ajouter un nouvel auteur à la base de données à moins d'ajouter un livre. Que se passe-t-il si l'auteur n'est pas encore publiée ou si vous ne connaissez pas le nom d'un livre qu'elle a écrit?
- Si "Orson Scott Card" a changé de citoyenneté, vous devez la changer dans tous les enregistrements dans lesquels il apparaît. Avoir plusieurs enregistrements avec le même auteur peut entraîner des données inexactes: que se passe-t-il si le responsable de la saisie de données ne réalise pas qu'il en a plusieurs et qu'il modifie les données dans un seul enregistrement?
- Vous ne pouvez pas supprimer un livre comme "The Handmaid's Tale" sans supprimer également complètement l'auteur.
Ce ne sont là que quelques-unes des raisons pour lesquelles la normalisation et l’évitement des dépendances transitives protègent les données et en assurent la cohérence.