MS SQL “on DELETE CASCADE” plusieurs clés étrangères pointant vers la même table?

Howdy,
J'ai un problème lorsque j'ai besoin d'une cascade sur plusieurs clés étrangères pointant vers la même table..

[Insights]
| ID | Title        |
| 1  | Monty Python |
| 2  | Spamalot     | 

[BroaderInsights_Insights]
| broaderinsight_id | insight_id |
| 1                 | 2          |

Fondamentalement, lorsque l'enregistrement d'un ou deux dans les réflexions de la table est supprimée j'ai besoin de la relation aussi être supprimé..

J'ai essayé ceci:

 CREATE TABLE broader_insights_insights(id INT NOT NULL IDENTITY(1,1),
   broader_insight_id INT NOT NULL REFERENCES insights(id) ON DELETE CASCADE,
   insight_id INT NOT NULL REFERENCES insights(id) ON DELETE CASCADE,
   PRIMARY KEY(id))
Go

Cette résultats dans l'avertissement que la cascade "peut provoquer des cycles ou plusieurs cascade chemin"

Donc j'ai essayé de l'ajout d'une cascade juste à la insight_id et il en résulte:

"La SUPPRESSION de la déclaration en contradiction avec la RÉFÉRENCE de la contrainte"

Des idées?

Grâce

Daniel

  • Une telle suppression en cascade est rarement une bonne idée. Pensez à ce qui arriverait si vous aussi vous avez "la Vie de Brian" là-dedans. Supprimer LoB, et la suppression des cascades à tuer des Monty Python, qui s'applique à supprimer Spamalot. Puisque c'est une circulaire de la relation, la suppression de tout membre du cercle supprime l'ensemble du cercle.
  • Suis-je malentendu cascades? je pensais que le concept était lors de l'enregistrement référencé a été supprimé de la relation est également supprimé? comment suggérez-vous atteindre cet objectif?
  • Vous avez besoin de faire le supprime dans une transaction (en plus simple je na stockées proc) plutôt que par des suppressions en cascade.
  • B - les Cascades ne fonctionnent que dans un seul sens. La suppression de Métier serait la suppression de toute référence à partir de cette table de liaison de LoB, mais elles n'ont pas d'incidence sur les autres lignes dans des Perspectives.
  • La nécessité pour les multiples cascade de chemins est omniprésent et parfaitement légitime. Pratiquement tout le temps, vous avez une plusieurs-à-plusieurs relation vous en avez besoin. Dire que vous avez des Pièces, les Fournisseurs et les PartVendors. Si vous supprimez une Partie, vous souhaitez supprimer toutes les lignes dans PartVendors pour cette partie. Si vous supprimez un Vendeur, vous voulez supprimer les lignes dans PartVendors pour ce Fournisseur. Mais SQL Server ne prend pas en charge cette. C'est le souper ennuyeux, pas d'autres graves moteur DB a ce problème, les gens se sont plaints à ce sujet en 2005, Microsfot convenu qu'il était un "élément souhaitable" en 2008, mais toujours là en 2014, ils n'en ont pas.
  • La dernière chose que je veux faire est d'aller de l'ajout d'un déclencheur personnalisé à la moitié de toutes les tables de toutes les bases de données qui ont besoin de participer à plusieurs-à-plusieurs liens.

InformationsquelleAutor Daniel Upton | 2011-02-16