CASCADE DELETE dans MSSQL Server ne peut être appliqué qu'en cascade à une seule table. Si vous avez deux tables avec des relations de clé étrangère dans une table de dimension, vous ne pouvez supprimer en cascade que l'une d'entre elles. (Ceci permet d'éviter la suppression en cascade de plusieurs chemins et la création de conflits, tout comme C++ permet l'héritage multiple mais C# n'autorise qu'un seul héritage)
Dans ce cas, vous devez utiliser des déclencheurs ou gérer spécifiquement le cas dans votre code.
Pour cette raison, j'ai vu beaucoup de gens opter pour l'utilisation de déclencheurs dans tous les cas. Même lorsqu'il n'y a qu'une seule table étrangère. Cela garantit la cohérence et permet aux utilisateurs de savoir ce qu'il faut rechercher lors de la maintenance de la base de données.
Si l'on pouvait mettre en cascade une suppression à plus d'un tableau, je dirais que ce serait l'option la plus préférable. Cette limitation, cependant, trouble les eaux et je suis actuellement plus en faveur des déclencheurs possédant tous ces comportements. L'utilisation de déclencheurs pour les suppressions et les mises à jour en cascade n'est que minime en termes de codage, mais permet des pratiques standard qui sont vraiment génériques.
EDIT:
Vous pouvez déplacer la « réponse acceptée » à quelqu'un d'autre, j'ai travaillé que j'avais tort Abot ci-dessus.
Vous pouvez avoir plusieurs tables de faits sur ON SUPPRIMER CASCADE Contraintes de clé étrangère à un tableau de dimensions signet. Ce que vous ne pouvez pas faire est d'avoir une table de faits ayant des contraintes de clé étrangère DELETE CASCADE à plusieurs tables de dimension.
Ainsi, par exemple ...
- Tableau des dimensions [personne] (id INT IDENTITY,)
- Table Dimension [examen] (id INT IDENTITY,)
- Table Face [Exam_Score] (person_id INT, exam_id INT, score INT)
Si la personne ou l'examen est supprimé, vous souhaitez que les enregistrements Exam_Score associés soient également supprimés.
Ceci n'est pas possible en utilisant ON DELETE CASCADE dans MS SQL Server, d'où la nécessité de triggers.
(Toutes mes excuses à Mehrdad qui ont essayé d'expliquer cela à moi, mais j'échapperaient complètement son point.)
Merci Dems, cela ressemble exactement pourquoi ils ont mis les déclencheurs en place –
+1 - Je n'ai pas pensé à cette situation . –