Dupliquer de: Quand / Pourquoi utiliser le cascade dans SQL Server?
J'ai toujours eu trop peur d'utiliser DELETE CASCADE, mais au fur et à mesure que je me sens plus confiant (paresseux: D), je pense à quel point ça peut être mal, est-ce la meilleure pratique à utiliser ou devrais-je l'éviter? foreign keys etc la manière à l'ancienne (avec des procédures stockées)?
ON DELETE CASCADE est correct, mais seulement lorsque les lignes dépendantes sont vraiment une extension logique de la ligne en cours de suppression. Par exemple, DELETE ORDERS permet de supprimer les ORDER_LINES associés, car il est clair que vous souhaitez supprimer cette command, qui consiste en un en-tête et quelques lignes. D'autre part, DELETE CLIENT ne doit pas supprimer les ORDERS associés, car les ORDERS sont importants en eux-mêmes, ils ne sont pas seulement des attributes d'un client.
Une façon de penser à ceci est la suivante: si je publie DELETE X et supprime également Y, serai-je heureux ou malheureux? Et si je publie SUPPRIMER X et qu'on me dit "je ne peux pas supprimer X parce que Y existe" serai-je content de la protection, ou irrité de l'incovenience?
Je préfère avoir le contrôle sur ce qui est supprimé (en le déclarant explicitement), donc j'opte généralement pour supprimer via les procédures stockées, et ne pas utiliser les suppressions en cascade.