Aller au contenu

Utilité du ON DELETE CASCADE

En Oracle, lorsqu’on crée une clé étrangère, on peut ajouter l’option ON DELETE CASCADE.

Cette option permet de supprimer automatiquement les enregistrements enfants (les dépendances) lorsqu’un enregistrement parent (clé primaire) est supprimé.

👉 Cela évite :

  • les erreurs d’intégrité référentielle
  • les suppressions manuelles en plusieurs étapes
  • les données « orphelines » dans les tables enfants

Exemple

Soit la création des tables suivantes :

CREATE TABLE Client (
    noClient NUMBER(10) 
        CONSTRAINT pk_noClient PRIMARY KEY,
    nomClient VARCHAR2(50)
);

CREATE TABLE Commande (
    noCommande NUMBER(12) 
        CONSTRAINT pk_noCommande PRIMARY KEY,
    dateCommande DATE,
    noClientCommande NUMBER(10)
        CONSTRAINT fk_noClientCommande REFERENCES Client(noClient)
);

SANS la clause ON DELETE CASCADE

Si une clé étrangère (fk_noClientCommande) est définie sans la clause ON DELETE CASCADE, Oracle empêche la suppression d’un enregistrement parent s’il existe encore des références à cette clé primaire.

Si un client a des commandes, cette instruction :

DELETE FROM Client
WHERE noClient = 101;

❌ produira une erreur tant que des commandes existent pour ce client.

AVEC la clause ON DELETE CASCADE

Lorsqu'on déclare la clé étrangère, on ajoute la clause ON DELETE CASCADE pour indiquer que si le parent est supprimé, alors les enregistrementsd qui y font référence doivent aussi être supprimés.

En SQL, on écrit alors la déclaration de la contrainte comme suit :

CREATE TABLE Commande (
    noCommande NUMBER(12) 
        CONSTRAINT pk_noCommande PRIMARY KEY,
    dateCommande DATE,
    noClientCommande NUMBER(10)
        CONSTRAINT fk_noClientCommande REFERENCES Client(noClient) ON DELETE CASCADE
);

👉 Ici, si on supprime un client avec l'instruction suivante :

DELETE FROM Client
WHERE noClient = 101;

✔ Toutes les commandes associées à ce client seront automatiquement supprimées.

Quand l'utiliser

C’est utile lorsque :

  • On est en mode tests
  • Les enregistrements enfants n’ont pas de sens sans le parent
  • On veut simplifier la gestion des suppressions
  • On souhaite garantir automatiquement la cohérence des données

⚠ Attention : cette option peut entraîner des suppressions importantes. Il faut l’utiliser seulement lorsque le système le justifie et que les données supprimées automatiquement ne sont pas nécessaires à long terme.