2010-04-09 3 views
2

J'ai deux tables, Results et ComparedResults.Sql Serve - Cascade delete a plusieurs chemins

ComparedResults possède deux colonnes faisant référence à la clé primaire de la table Results. Mon problème est que si un enregistrement dans Results est supprimé, je souhaite supprimer tous les enregistrements dans ComparedResults qui référencent l'enregistrement supprimé, qu'il s'agisse d'une colonne ou de l'autre (et les colonnes peuvent référencer la même ligne Results) .

Une ligne dans Résultats peut être supprimée directement ou par suppression en cascade provoquée par la suppression dans une troisième table. Googling cela pourrait indiquer que je dois désactiver la suppression en cascade et réécrire toutes les suppressions en cascade pour utiliser des déclencheurs à la place. Est-ce vraiment NESSAIRE? Je serais prêt à faire beaucoup de restructuration de la base de données pour éviter cela, car mon principal domaine est la programmation OO, et les bases de données devraient «juste fonctionner». Cependant, il est difficile de voir comment une restructuration pourrait aider car je ne ferais que déplacer le problème ... Ou est-ce que je manque quelque chose?

Je suis également un peu perplexe quant à savoir pourquoi ma construction initiale devrait même être un problème pour le serveur Sql ?!

Tous les commentaires sont les bienvenus et très appréciés!

Anders, Danemark

+0

Vous avez raison. Vous avez quelque chose comme ceci: Table 'Résultats' sauvegardée avec succès Table 'ComparedResults' - Impossible de créer une relation 'FK_ComparedResults_Results_Ref'. L'introduction de la contrainte FOREIGN KEY 'FK_ComparedResults_Results_Ref' dans la table 'ComparedResults' peut provoquer des cycles ou plusieurs chemins en cascade. Spécifiez ON DELETE NO ACTION ou ON UPDATE NO ACTION ou modifiez d'autres contraintes FOREIGN KEY. Impossible de créer une contrainte. Voir les erreurs précédentes. – garik

+0

Utiliser le déclencheur pour cascade supprimer le second. – garik

+0

Je pense que je vais aller pour l'option de déclenchement - Je dois aller de l'avant ... –

Répondre

0

Serait-il possible de diviser les ComparedResults en deux tables?

Modifier: Vous pouvez ensuite utiliser une vue pour rassembler les résultats à afficher? Ou une jointure entre les deux tables?

+0

Eh bien, je suppose que je pourrais, mais il ne ferait que déplacer le problème, comme je le vois - il me faudrait encore une table pour 'les tables découpées et elles causeraient toujours plusieurs chemins de suppression de cascade ... –

+0

Vous pourriez alors employer une vue pour rassembler les résultats pour montrer? Ou une jointure entre les deux tables? –

Questions connexes