gpt4 book ai didi

sql-server - 级联删除导致多个级联路径

转载 作者:行者123 更新时间:2023-12-03 01:59:37 24 4
gpt4 key购买 nike

我使用的是 SQlServer 2008,下面显示了一些数据表的摘录:

用户

ID(PK)

用户项目

用户 ID (PK)ItemId (PK) - (2 列的复合键)...

用户项目投票

用户 ID (PK)项目 ID (PK)VoterId (PK) - (3 列的复合键)

我定义了以下关系:

  • User.Id -> UserItems.UserId
  • (UserItems.UserId,UserItems.ItemId)->(UserItemVotes.UserId,UserItemVotes.ItemId)
  • UserId.Id -> UserItemVotes.VoterId

现在,我在打开级联删除时遇到问题。添加第三个关系时,我收到错误“...可能导致循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。”我真的不想这样做,理想情况下,如果用户被删除,我想删除他们的用户项目和/或他们的投票。

这是一个糟糕的设计吗?或者有没有办法从 SQL Server 获得我想要的行为?

最佳答案

批准的答案不是一个好的答案。所描述的场景并不是糟糕的设计,依赖数据库完成其工作也没有“风险”。

最初的问题描述了一个完全有效的场景,并且设计经过深思熟虑。显然,删除用户应该删除该用户的项目(以及对这些项目的任何投票),并删除用户对任何项目(甚至属于其他用户的项目)的投票。当删除用户记录时要求数据库执行这种级联删除是合理的。

问题是 SQL Server 无法处理它。它的级联删除实现是有缺陷的。

关于sql-server - 级联删除导致多个级联路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1451553/

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