Cours SQL et MySQL · Module 9: Index et normalisation

Les clés étrangères et l'intégrité des données

2 min de lecture
Dans cette leçon3

Notre Bibliothèque est un réseau de renvois. Un parchemin de livre ne répète pas toute la biographie de l'auteur - il pointe plutôt vers le numéro de catalogue du parchemin qui décrit le créateur. Dans MySQL, un tel renvoi est une clé étrangère.

Qu'est-ce qu'une clé étrangère

La colonne autor_id de la table ksiazki stocke l'id d'un auteur de la table autorzy. Une clé étrangère formalise cette relation et fait en sorte que la Bibliothèque s'assure que chaque autor_id pointe vers un auteur existant.

1ALTER TABLE ksiazki ADD FOREIGN KEY (autor_id) REFERENCES autorzy(id);

Nous le lisons ainsi : « La colonne autor_id de ksiazki fait référence à la colonne id de autorzy ».

Intégrité référentielle

Grâce à la clé étrangère, la base de données ne te permettra pas de :

  • ajouter un livre dont l'autor_id n'existe pas dans autorzy,
  • supprimer un auteur encore référencé par des livres (sauf si tu en décides autrement).

C'est l'intégrité référentielle - la garantie que les renvois du catalogue ne mènent jamais nulle part.

Que faire lors d'une suppression ?

Tu peux préciser ce qu'il advient des livres quand leur auteur disparaît :

1ALTER TABLE ksiazki
2ADD FOREIGN KEY (autor_id) REFERENCES autorzy(id)
3ON DELETE CASCADE;
  • ON DELETE CASCADE - supprimer un auteur supprime automatiquement ses livres (une cascade).
  • ON DELETE SET NULL - supprimer un auteur place autor_id à NULL (le livre reste, mais sans auteur assigné).

Le choix dépend de la façon dont tu veux maintenir l'ordre dans la Bibliothèque. Les clés étrangères sont les gardiennes de la cohérence - sans elles, le catalogue se remplirait bientôt de renvois morts.

Tu as repéré une erreur dans cette leçon ?

Teste tes connaissances

Réponds aux questions de cette leçon. Choisis une réponse pour voir tout de suite si elle est correcte.

  1. 1. À quoi sert une clé étrangère (FOREIGN KEY) ?

  2. 2. Que garantit l'intégrité référentielle imposée par une clé étrangère ?

Voici 2 des 4 questions de cette leçon. Réponds aux autres dans le jeu.

Tâches pratiques dans le jeu

  • Éditeur de code

    Ajoute à la table ksiazki une clé étrangère sur la colonne autor_id qui pointe vers la colonne id de la table autorzy. Utilise ALTER TABLE.

  • Tri horizontal

    Ordonne sur une ligne le fragment correct qui ajoute une clé étrangère (la partie REFERENCES) :

  • Éditeur de code

    Ajoute à la table wypozyczenia une clé étrangère sur la colonne ksiazka_id qui pointe vers la colonne id de la table ksiazki. Utilise ALTER TABLE.

  • Tri vertical

    Ordonne les lignes de la commande qui ajoute une clé étrangère avec une règle de suppression en cascade (comme on les écrit dans l'éditeur) :

  • Éditeur de code

    Ajoute à la table wypozyczenia une clé étrangère sur la colonne czytelnik_id qui pointe vers la colonne id de la table czytelnicy. Utilise ALTER TABLE.