级联删除导致多个级联路径

Dan*_*Dan 4 sql-server database-design

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

用户

Id(PK)

UserItems

UserId(PK)ItemId(PK) - (2列的复合键)...

UserItemVotes

UserId(PK)ItemId(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获得我想要的行为?

小智 12

批准的答案不是一个好的答案.所描述的场景设计并不差,依靠数据库完成其工作也不是"冒险".

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

问题是SQL Server无法处理它.它的级联删除的实现是不足的.