Problème de path d'access en cascade multiple SQL Server: mon model est-il défectueux?

J'ai le model suivant:

Diagramme ER

Je souhaite que la suppression automatique fonctionne en cas de suppression, à la fois parce que c'est pratique, que mes données sont cohérentes et parce qu'elles sont bien sockets en charge dans Entity Framework Code First. Le problème est que ce model spécifique provoque plusieurs paths en cascade. Cela se traduit par SQL Server me donne l'erreur suivante lorsque j'essaie de générer la database via EF Code First:

L'introduction de la contrainte FOREIGN KEY 'FK_dbo.Events_dbo.Tournaments_Tournament_Id' sur la table 'Event' peut provoquer des cycles ou plusieurs paths en cascade. Spécifiez ON DELETE NO ACTION ou ON UPDATE NO ACTION ou modifiez d'autres contraintes FOREIGN KEY.

Je comprends que lors de la suppression d'un Tournament , ce serait une course, que la suppression du Contestant ou de l' Event triggers ou non la suppression de EventContestant . SQL Server n'apprécie pas cela.

Maintenant, la question est, y at-il quelque chose de mal avec mon model? Y a-t-il d'autres façons de modéliser ces données ou d'effectuer une configuration pour résoudre ce problème? J'aimerais respecter les exigences suivantes:

  1. La suppression d'un Tournament doit se EventContestant sur Event , Contestant et EventContestant
  2. La suppression d'un Event doit être EventContestant sur EventContestant
  3. La suppression d'un Contestant doit être EventContestant sur EventContestant
  4. Une relation entre Contestant et Event est optionnelle (d'où la multiplicité 0- *)

Je pourrais résoudre le problème en introduisant une key primaire séparée dans EventContestant, au lieu de la key combinée des deux propriétés de navigation, mais alors je casserais les exigences 1 à 3. D'autres suggestions?

Maintenant, la question est, y at-il quelque chose de mal avec mon model?

Pas nécessairement. Les dependencies en forme de losange sont assez courantes dans la modélisation de database.

Le problème est que MS SQL Server ne supporte pas les actions référentielles automatiques sur ces dependencies, même si elles peuvent être une situation parfaitement valide du sharepoint vue logique. En d'autres termes, votre outil est plus limitant qu'il ne devrait l'être.

Vous devrez utiliser des triggersurs pour implémenter des cascades.