Je suis en train de mettre en place une table qui sera utilisée pour envoyer des messages de suivi à certaines demandes d'information. Une demande est envoyée à un groupe de personnes et les réponses sont suivies. Si une personne ne répond pas, zéro ou plusieurs suivis peuvent être envoyés. J'ai créé une table:Désactiver les contraintes pendant la transaction
FollowupId int primary key,
RequestId int foreign key (outside this example),
Follows int foreign key (FollowupId),
Message varchar
Si un message doit être le premier message de suivi, Follows sera null. Sinon, c'est l'identifiant d'un autre suivi. J'ai également ajouté une contrainte unique sur Follows. Autrement dit, pas plus d'un message peut suivre un message donné.
EDIT: Je devrais également mettre en surbrillance la clé étrangère sur Suit. Il fait référence à FollowupId dans cette table. Donc, si A-> B-> C, la simple suppression de B rend la clé étrangère de C invalide. De même, il n'est pas possible de simplement mettre à jour C pour suivre A parce que B suit déjà A et que la contrainte unique interdit la duplication. Le problème est, bien sûr, que la suppression des entrées de suivi est maintenant difficile si ce message est suivi par un autre. Il me semble qu'il devrait être possible de désactiver la vérification des contraintes pour permettre de supprimer un suivi intermédiaire, "remonter" les suivis suivants, puis réactiver la vérification. Est-il possible de désactiver la contrainte uniquement pour la durée d'une transaction?
(De plus, je suis conscient de l'incohérence possible des données résultant de RequestId dans cette table Il peut être préférable d'avoir Followups [FollowupId, Message], InitialFollowups [FollowupId, RequestId] et FollowingFollowups [FollowupId, Suit Je pense que cela complique inutilement cet exemple.)