Le nom écrit deux fois
Le CDI garde la liste de ses livres. Sur chaque fiche, on recopie le nom de l'auteur.
Marcel Pagnol a écrit deux livres du CDI. Son nom est donc écrit deux fois. Un jour, quelqu'un met un espace de trop après le nom.
Voyons ce qui se passe, puis comment l'éviter.
Mots-clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Clé primaire | La colonne qui distingue chaque ligne d'une table. | id dans auteurs |
| Clé étrangère | Une colonne qui garde la clé primaire d'une ligne d'une autre table. Elle crée le lien. | auteur_id dans livres |
| Référence | Le fait de pointer vers une ligne d'une autre table. | auteur_id = 2 pointe vers Marcel Pagnol. |
| Intégrité | Le fait que les données restent justes : aucun lien ne pointe dans le vide. | Pas d'auteur numéro 9 s'il n'existe pas. |
| Doublon | La même information écrite plusieurs fois. | Le nom de l'auteur recopié. |
| Lien | Ce qui relie une ligne d'une table à une ligne d'une autre. | Un livre et son auteur. |
| FOREIGN KEY | Les mots SQL qui déclarent une clé étrangère. En français : clé étrangère. | FOREIGN KEY (auteur_id) |
| REFERENCES | Le mot SQL qui dit vers quelle table et quelle colonne le lien pointe. | REFERENCES auteurs (id) |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Le problème du nom recopié
Quand on recopie une information, on prend trois risques.
- Une faute : « Pagnol » écrit de deux façons.
- Un changement : il faut le corriger dans toutes les lignes.
- Un gaspillage : le même nom est stocké des centaines de fois.
À toi : le livre qui manque
-- Tous les livres de Marcel Pagnol, dans la table où le nom est recopié.
SELECT titre FROM livres_en_vrac WHERE auteur = 'Marcel Pagnol';
-- Il en manque un ! Regarde toute la table pour trouver pourquoi.
SELECT id, titre, auteur FROM livres_en_vrac;
Deux tables au lieu d'une
La solution : une table pour les auteurs, une table pour les livres.
Chaque auteur est écrit une seule fois, avec un numéro. Dans la table des livres, on garde seulement ce numéro, pas le nom.
Exemple travaillé : la table auteurs
| id | nom |
|---|---|
| 1 | Victor Hugo |
| 2 | Marcel Pagnol |
| 3 | Molière |
| 4 | Jules Verne |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Exemple travaillé : la table livres
| id | titre | auteur_id |
|---|---|---|
| 1 | Les Misérables | 1 |
| 2 | Notre-Dame de Paris | 1 |
| 3 | La Gloire de mon père | 2 |
| 4 | Le Malade imaginaire | 3 |
| 5 | Vingt mille lieues sous les mers | 4 |
| 6 | Le Château de ma mère | 2 |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
À toi : lis les deux tables
À toi de jouer
À toi : lis les deux tables
3 questionsTes réponses sont corrigées ici et ne sont pas conservées. Un compte garde tes résultats.
À toi : relier à la main
-- Chercher à la main : d'abord le numéro de l'auteur...
SELECT id, nom FROM auteurs WHERE nom = 'Marcel Pagnol';
-- ... puis les livres qui portent ce numéro.
SELECT titre FROM livres WHERE auteur_id = 2;
-- Pagnol change d'écriture ? On corrige une seule ligne, dans auteurs.