web-dev-qa-db-fra.com

Dois-je utiliser la règle CASCADE DELETE?

Duplicata de: Quand/Pourquoi utiliser la cascade dans SQL Server?

J'ai toujours eu trop peur d'utiliser DELETE CASCADE, mais à mesure que je deviens plus confiant (paresseux: D), je pense à quel point cela peut être mauvais, est-ce la meilleure pratique de l'utiliser ou dois-je l'éviter et nettoyer mon clés étrangères, etc. à l'ancienne (avec des procédures stockées)?

36
inspite

ON DELETE CASCADE est très bien, mais uniquement lorsque les lignes dépendantes sont vraiment une extension logique de la ligne en cours de suppression. Par exemple, il est OK pour DELETE ORDERS de supprimer les ORDER_LINES associées, car vous souhaitez clairement supprimer cette commande, qui se compose d'un en-tête et de quelques lignes. D'un autre côté, DELETE CUSTOMER ne doit pas supprimer les COMMANDES associées car les COMMANDES sont importantes en elles-mêmes, ce ne sont pas seulement des attributs d'un client.

Une façon d'y penser est la suivante: si j'émets DELETE X et qu'il supprime également Y, serai-je heureux ou mécontent? Et si j'émets DELETE X et qu'on me dit "ne peut pas supprimer X parce que Y existe", serai-je content de la protection, ou irrité par le dérangement?

80
Tony Andrews

Je préfère contrôler exactement ce qui est supprimé (en le déclarant explicitement), donc je choisis généralement de supprimer via des procédures stockées, et de ne pas utiliser les suppressions en cascade.

12
Galwegian