Bases des bases de données
La clé primaire d'une table des clients Client(IdClient, Nom) est IdClient, et la colonne IdClient d'une table des commandes Commande(IdCommande, IdClient) est définie comme clé étrangère faisant référence à IdClient de la table Client. La table Client ne contient que les lignes dont IdClient vaut 'C1' et 'C2'. Que se passe-t-il si l'on exécute INSERT INTO Commande VALUES ('O9', 'C5') dans cet état ?
- ALa ligne n'est pas ajoutée et une erreur se produit, car la contrainte d'intégrité référentielle est violée
- BLa ligne est ajoutée, et une ligne dont IdClient vaut 'C5' est aussi ajoutée automatiquement à la table Client
- CLa ligne est ajoutée, mais sa valeur IdClient est remplacée par NULL
Afficher la réponse et l'explication
Réponse : A. La ligne n'est pas ajoutée et une erreur se produit, car la contrainte d'intégrité référentielle est violée
Une clé étrangère est une colonne qui fait référence à la clé primaire (ou équivalent) d'une autre table, ici la table Client, et elle impose la contrainte d'intégrité référentielle : seules des valeurs existant dans la table référencée, ou NULL, peuvent être stockées. La table Client ne contient pas de client 'C5' ; le SGBD refuse donc la tentative d'ajouter une commande pour un client inexistant, et une erreur se produit. On évite ainsi des commandes qui n'appartiennent à aucun client connu. Inversement, une tentative de supprimer de la table Client une ligne de client qui a encore des commandes est elle aussi refusée avec le comportement par défaut (NO ACTION). Ajouter ON DELETE CASCADE à la définition de la clé étrangère fait que la suppression d'un client supprime aussi en cascade les commandes de ce client.
Continuer : 9 autres questions sur Bases des bases de données