Qu'est-ce que Clé étrangère (foreign key) ?

Colonne qui fait référence à la clé primaire (ou à une colonne unique) d'une autre table. Grâce à la contrainte d'intégrité référentielle, qui n'admet que des valeurs existant dans la table référencée ou NULL, elle empêche les données qui pointent vers des lignes inexistantes. On peut aussi préciser le comportement lorsqu'une ligne référencée est supprimée ou mise à jour (refus, suppression en cascade, etc.).

Nom japonais: 外部キー

« Clé étrangère (foreign key) » apparaît dans 5 questions d'entraînement réparties sur 1 thèmes, dont Bases des bases de données.

Domaine: Bases des bases de données

S'entraîner : questions sur Clé étrangère (foreign key)

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 ?

  1. ALa ligne n'est pas ajoutée et une erreur se produit, car la contrainte d'intégrité référentielle est violée
  2. BLa ligne est ajoutée, et une ligne dont IdClient vaut 'C5' est aussi ajoutée automatiquement à la table Client
  3. 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.

« Clé étrangère (foreign key) » dans les explications

Questions mentionnant « Clé étrangère (foreign key) » (5)

  1. 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 ?
  2. Une table d'inscriptions Inscription(NumEtudiant, NumCours, Note) enregistre quel étudiant a suivi quel cours et avec quelle note. Un étudiant suit plusieurs cours, et un cours est suivi par plusieurs étudiants. Si un même étudiant ne s'inscrit jamais 2 fois au même cours, quelle clé primaire convient à cette table ?
  3. La clé primaire d'une table Employe(NumEmploye, Nom, CodeService, NomService) est NumEmploye, et chaque colonne contient une seule valeur. Les dépendances fonctionnelles sont NumEmploye → Nom, NumEmploye → CodeService et CodeService → NomService. Quelle proposition indique correctement la forme normale de cette table ?
  4. Dans un diagramme E-R, il existe une relation plusieurs-à-plusieurs entre étudiants et cours : un étudiant suit plusieurs cours, et un cours est suivi par plusieurs étudiants. Quelle est la manière appropriée de mettre en œuvre cette relation avec des tables d'une base de données relationnelle ?
  5. Parmi les propriétés ACID qu'une transaction doit posséder, laquelle garantit qu'un virement qui débite le compte A et crédite le compte B est soit effectué entièrement, soit pas du tout, même si une panne survient en cours de route ?

Termes associés

Clé primaire SQL Troisième forme normale (3NF) Diagramme E-R (entité-association) Base de données relationnelle Propriétés ACID Transaction Index (index de base de données) Niveau d'isolation Normalisation

Retour au glossaire