Aller au contenu
Contraintes & intégrité

FOREIGN KEY

Une clé étrangère garantit qu'une valeur pointe vers une ligne qui existe dans une autre table, comme l'élève d'une absence. Elle empêche les références orphelines et encadre les suppressions.

  • clé étrangère
  • référence
  • intégrité
  • ON DELETE
  • CASCADE
  • PRAGMA foreign_keys

Syntaxe

Modèle
col INTEGER REFERENCES table_parent(id)  [ON DELETE CASCADE | SET NULL | RESTRICT]  [ON UPDATE ...]

Exemple

Exemple concret
PRAGMA foreign_keys = ON;CREATE TABLE absences (  id INTEGER PRIMARY KEY,  student_id INTEGER NOT NULL REFERENCES students(id) ON DELETE CASCADE,  absent_on TEXT NOT NULL);INSERT INTO absences (student_id, absent_on) VALUES (2, '2024-10-03');INSERT INTO absences (student_id, absent_on) VALUES (99, '2024-10-04');-- Jeu de données : école-- La première absence est acceptée. La seconde vise un élève 99 qui n'existe pas.-- Résultat attendu : erreur « FOREIGN KEY constraint failed »

À retenir

  1. Piège : SQLite ne vérifie les clés étrangères qu'après PRAGMA foreign_keys = ON, à exécuter à chaque connexion et hors transaction. Sans cette ligne, l'insertion de l'élève 99 passe sans erreur.
  2. Actions ON DELETE : CASCADE supprime les lignes enfants, SET NULL vide la référence, RESTRICT ou NO ACTION (par défaut) refusent la suppression du parent.
  3. Une clé étrangère peut être NULL : c'est une relation facultative, comme une classe sans professeur. Ajoutez NOT NULL si la relation est obligatoire.
  4. La clé étrangère n'est pas indexée automatiquement. Créez un index sur student_id pour accélérer les jointures et les vérifications lors des suppressions.

Voir aussi