【发布时间】:2011-02-20 13:22:29
【问题描述】:
我正在整理一个表格,用于向某些信息请求发送后续消息。向一组人发送请求并跟踪响应。如果一个人没有响应,则可能会发送零个或多个跟进。我创建了一个表:
FollowupId int primary key,
RequestId int foreign key (outside this example),
Follows int foreign key (FollowupId),
Message varchar
如果一条消息是第一条后续消息,Follows 将为空。否则,它是其他一些后续的 id。我还在 Follows 上添加了一个独特的约束。也就是说,任何给定的消息后面只能有一条消息。
编辑:我还应该在 Follows 上突出显示外键。它引用此表中的 FollowupId。所以如果 A->B->C,仅仅删除 B 会使 C 中的外键失效。同样,不可能只更新 C 以跟随 A,因为 B 已经跟随 A,并且唯一约束禁止重复。
当然,问题是,如果该消息后面跟着另一个消息,那么现在删除后续条目会很困难。在我看来,应该可以禁用约束检查以删除中间跟进,“向上移动”后续跟进,然后重新启用检查。有没有办法只在事务期间禁用约束?
(另外,我知道在此表中包含 RequestId 可能会导致数据不一致。最好包含 Followups [FollowupId, Message]、InitialFollowups [FollowupId, RequestId] 和 FollowFollowups [FollowupId, Follows]表。我认为这不必要地使这个例子复杂化。)
【问题讨论】:
标签: sql-server