gpt4 book ai didi

sql-server - 交易期间禁用约束

转载 作者:行者123 更新时间:2023-12-03 03:09:48 25 4
gpt4 key购买 nike

我正在整理一个表格,用于向某些信息请求发送后续消息。请求被发送给一组人并跟踪响应。如果某人未能回复,则可能会发送零个或多个后续信息。我创建了一个表:

FollowupId int primary key, 
RequestId int foreign key (outside this example),
Follows int foreign key (FollowupId),
Message varchar

如果消息是第一条后续消息,则 Follows 将为空。否则,它是其他一些 Followup 的 id。我还对 Follows 添加了一个独特的约束。也就是说,任何给定消息后面不能多于一条消息。

编辑:我还应该突出显示 Follows 上的外键。它引用此表中的 FollowupId。所以如果A->B->C,只要删除B就会使C中的外键失效。同样,不可能只更新 C 以跟随 A,因为 B 已经跟随 A 并且唯一约束禁止重复。

问题当然是,如果该消息后面跟着另一条消息,那么删除后续条目现在会很困难。在我看来,应该可以禁用约束检查,以便可以删除中间的后续操作,“向上移动”后续的后续操作,然后重新启用检查。有没有办法仅在事务期间禁用约束?

(此外,我知道此表中包含 RequestId 可能会导致数据不一致。最好包含 Followups [FollowupId, Message]、InitialFollowups [FollowupId, RequestId] 和 FollowingFollowups [FollowupId, Follows]表。我认为这不必要地使这个例子变得复杂。)

最佳答案

禁用/启用某些修改的约束通常是一个坏主意,而且性能可能会很差。每当您执行此操作时,请确保您的约束不仅已启用,而且在完成后受信任。

在您的情况下,您需要删除一行并修改另一行。如果您已经使用 SQL 2008,则应该使用 MERGE,它允许您在一个命令中删除和更新。

关于sql-server - 交易期间禁用约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2851714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com