5.8 Modification des données
119
© Dunod – La photocopie non autorisée est un délit.
foreign key (NCLI) references CLIENT
on delete set null)
La modification de la valeur de l’identifiant NCLI de CLIENT est aussi régie par des
règles similaires (on update) : refus s’il existe des commandes dépendantes (no
action), propagation par modification des clés étrangères pour les commandes
dépendantes (cascade) et mise à null des clés étrangères (set null) :
create table COMMANDE ( NCOM char(12) not null,
NCLI char(10) not null,
...,
primary key (NCOM),
foreign key (NCLI) references CLIENT
on delete no action
on update cascade)
b) Les hiérarchies de clés étrangères
La définition de ces modes comportementaux demande un soin particulier. En effet,
le mode d’une clé étrangère peut influencer celui d’une autre clé étrangère. Considérons par exemple le schéma simplifié suivant
create table CLIENT ( NCLI char(10) not null,
primary key (NCLI) )
create table COMMANDE ( NCOM char(12) not null,
NCLI char(10) not null,
primary key (NCOM),
foreign key (NCLI) references CLIENT
on delete cascade)
create table DETAIL ( NCOM char(12) not null,
NPRO char(15) not null,
foreign key (NCOM) references COMMANDE
on delete no action)
Lors de la suppression d’une ligne de CLIENT, le SGBD tente de supprimer en
cascade les lignes de COMMANDE qui en dépendent. Cependant, si une de ces
lignes de COMMANDE est associée à une ligne de DETAIL, sa suppression est
refusée (on delete no action), et donc la suppression de la ligne de CLIENT l’est
également. De ce schéma, on déduit qu’on ne peut supprimer un client que s’il n’a
aucune commande qui possède des détails.
Les modes comportementaux liés aux suppressions et aux mises à jour posent des
problèmes complexes qui amènent généralement les SGBD à travailler en deux
phases : dans un premier temps, les lignes à supprimer sont simplement marquées,
puis les modifications sont effectivement réalisées.
Précédent

- 119/436

Suivant