Code : SQL
-- Suppression de la clé --- -----------------------ALTER TABLE Animal DROP FOREIGN KEY fk_race_id;
-- Recréation de la clé avec les bonnes options --- ----------------------------------------------ALTER TABLE Animal
ADD CONSTRAINT fk_race_id FOREIGN KEY (race_id) REFERENCES Race(id)
ON DELETE SET NULL
-- N'oublions pas de remettre le ON DELETE
!
ON UPDATE CASCADE;
-- Modification de l'id des Singapura --- ------------------------------------UPDATE Race SET id = 3 WHERE nom = 'Singapura';
Les animaux notés comme étant des "Singapura" ont désormais leur race_id à 3. Parfait !
En règle générale (dans 99,99 % des cas), c'est une très très mauvaise idée de changer la valeur d'un id (ou de votre clé
primaire auto-incrémentée, quel que soit le nom que vous lui donnez). En effet, vous risquez des problèmes avec l'autoincrément, si vous donnez une valeur non encore atteinte par auto-incrémentation par exemple. Soyez bien conscients
de ce que vous faites. Je ne l'ai montré ici que pour illustrer le ON UPDATE, parce que toutes nos clés étrangères
référencent des clés primaires. Mais ce n'est pas le cas partout. Une clé étrangère pourrait parfaitement référencer un
simple index, dépourvu de toute auto-incrémentation, auquel cas vous pouvez vous amuser à en changer la valeur
autant de fois que vous le voudrez.
Modifions une dernière fois cette clé étrangère pour remettre l'option ON UPDATE par défaut.
Code : SQL
ALTER TABLE Animal DROP FOREIGN KEY fk_race_id;
ALTER TABLE Animal
ADD CONSTRAINT fk_race_id FOREIGN KEY (race_id) REFERENCES Race(id)
ON DELETE SET NULL;
Utilisation de ces options dans notre base
Appliquons maintenant ce que nous avons appris à notre base de données elevage. Celle-ci comporte 5 clés étrangères :
Sur la table Animal
race_id référence Race.id
espece_id référence Espece.id
mere_id référence Animal.id
pere_id référence Animal.id
Sur la table Race
espece_id référence Espece.id
Modifications
Pour les modifications, le mieux ici est de laisser le comportement par défaut (RESTRICT) pour toutes nos clés étrangères. Les
colonnes référencées sont chaque fois des colonnes auto-incrémentées, on ne devrait donc pas modifier leurs valeurs.
Partie 2 : Index, jointures et sous-requêtes
139/414
www.openclassrooms.com
Précédent

- 139/413

Suivant