Cours SQL et MySQL · Module 9: Index et normalisation
Les clés étrangères et l'intégrité des données
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_idn'existe pas dansautorzy, - 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. À quoi sert une clé étrangère (FOREIGN KEY) ?
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.