SQL Academy · Leçon

FOREIGN KEY et actions référentielles

Reliez les tables avec FOREIGN KEY et choisissez ON DELETE CASCADE / SET NULL / RESTRICT pour obtenir le comportement approprié.

Leçon 3 sur 413 étapes

FOREIGN KEY et actions référentielles est une leçon SQL Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage SQL Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours SQL Academy comprend 4 leçons au total.

Rôle d’une clé étrangère

Une FOREIGN KEY fait refuser par la base de données les lignes qui font référence à des parents inexistants :

CREATE TABLE orders (
  id BIGSERIAL PRIMARY KEY,
  user_id BIGINT NOT NULL REFERENCES users(id),
  total NUMERIC(10,2) NOT NULL
);

-- Inserting an order with user_id=999 fails if no such user exists.

Pourquoi utiliser des clés étrangères ?

Les clés étrangères garantissent l’intégrité référentielle :

  • Aucune ligne orpheline
  • Les bogues de l’application sont détectés au moment de l’insertion
  • Les diagrammes ER restent exacts
  • Le comportement des cascades automatiques est assuré

Actions référentielles

Que doit-il se passer lorsque la ligne parent est supprimée ou mise à jour ? Cinq options :

  • NO ACTION — erreur (par défaut, différable)
  • RESTRICT — erreur (non différable)
  • CASCADE — supprime ou met également à jour l’enfant
  • SET NULL — définit la FK de l’enfant à NULL
  • SET DEFAULT — définit la FK de l’enfant à sa valeur par défaut

ON DELETE CASCADE

« Lorsque l’utilisateur est supprimé, supprimez aussi ses commandes » :

CREATE TABLE orders (
  id BIGSERIAL PRIMARY KEY,
  user_id BIGINT NOT NULL
    REFERENCES users(id) ON DELETE CASCADE,
  total NUMERIC(10,2) NOT NULL
);

ON DELETE SET NULL

« Lorsque le responsable est supprimé, les employés restent présents, mais perdent leur responsable » :

CREATE TABLE employees (
  id BIGSERIAL PRIMARY KEY,
  full_name TEXT NOT NULL,
  manager_id BIGINT REFERENCES employees(id) ON DELETE SET NULL
);

Par défaut : similaire à RESTRICT

Sans action référentielle, toute tentative de supprimer un parent qui possède des enfants échoue :

ERROR:  update or delete on table "users" violates foreign key constraint "orders_user_id_fkey" on table "orders"
DETAIL:  Key (id)=(42) is still referenced from table "orders".

Indexez toujours la colonne FK

PostgreSQL ne crée PAS automatiquement d’index du côté enfant. Ajoutez-en un : sans cela, la suppression d’un parent déclenche un parcours complet de chaque table enfant :

CREATE INDEX orders_user_id_idx ON orders(user_id);

Clés étrangères composites

Faites référence à une clé primaire composite :

CREATE TABLE order_items (
  order_id BIGINT,
  line_no INT,
  PRIMARY KEY (order_id, line_no)
);
CREATE TABLE shipments (
  order_id BIGINT,
  line_no INT,
  FOREIGN KEY (order_id, line_no)
    REFERENCES order_items(order_id, line_no)
);

Différer les vérifications des clés étrangères

Vous devez parfois insérer deux lignes interdépendantes. Déclarez la FK comme DEFERRABLE INITIALLY DEFERRED :

ALTER TABLE orders
  ALTER CONSTRAINT orders_user_id_fkey DEFERRABLE INITIALLY DEFERRED;

BEGIN;
  INSERT INTO orders ... ;     -- FK temporarily not checked
  INSERT INTO users ... ;
COMMIT;                         -- checked here

Ajouter des clés étrangères en ligne

Sur les grandes tables, utilisez NOT VALID + VALIDATE pour éviter un verrouillage prolongé :

ALTER TABLE orders
  ADD CONSTRAINT orders_user_id_fkey
  FOREIGN KEY (user_id) REFERENCES users(id) NOT VALID;
ALTER TABLE orders VALIDATE CONSTRAINT orders_user_id_fkey;

Utilisez les cascades avec prudence

Les suppressions en CASCADE se propagent. Supprimer un utilisateur peut effacer des commandes, des paiements et des journaux d’audit. Assurez-vous que la cascade correspond bien à votre intention métier.

Récapitulatif

Les clés étrangères sont des garde-fous.

  • REFERENCES + une action déclarent le lien et son comportement
  • Indexez la colonne FK du côté enfant
  • Utilisez NOT VALID + VALIDATE pour les ajouts en ligne

Vérification rapide

Quelle action référentielle permet de supprimer AUTOMATICALLY une commande lorsque son utilisateur parent est supprimé ?

Gratuit pour commencer

Apprends SQL avec un tuteur IA — gratuit

Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.

Cours
46
Leçons
183

Questions Fréquemment Posées

La leçon « FOREIGN KEY et actions référentielles » est-elle gratuite ?

Oui — le texte complet de « FOREIGN KEY et actions référentielles » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours SQL Academy, passe à CoddyKit PRO. Le cours SQL Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « FOREIGN KEY et actions référentielles » ?

Reliez les tables avec FOREIGN KEY et choisissez ON DELETE CASCADE / SET NULL / RESTRICT pour obtenir le comportement approprié. Tu pratiques SQL Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer SQL Academy ?

Aucune expérience préalable n'est requise. SQL Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.

Combien de temps prend la leçon « FOREIGN KEY et actions référentielles » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon SQL Academy ?

Oui. Chaque leçon SQL Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Contraintes NOT NULL et CHECK
  2. Contraintes UNIQUE et clés composites
  3. FOREIGN KEY et actions référentielles
  4. Valeurs DEFAULT et colonnes générées
← Retour à SQL Academy