SQLServer外键不会让我用cascade添加约束(在删除或更新时)

时间:2016-04-13 12:16:35

标签: sql sql-server database constraints

我的数据库中有一个简单的数据模型,有三个表:

  • 国家
  • 票务
  • SubTicket

一张票可以有零到多个子邮箱。 每张票和每个小票都可以有一个州。

所以我的数据库看起来像这样:

my example Database

之间:xTicket和xState我有约束:

on update cascade / on delete no action(更改StateID时更新xTicket,更改xTicket中的条目

之间:xSubTicket和xTicket我有约束:

on update cascade / on delete cascade(更新TicketID中的xSubTicket并删除xTicket中的条目时删除条目

但是当我想要与xTicketxState相同的约束时:

on update cascade / on delete no action我收到以下消息:

外键约束可能导致循环或多个级联路径

外键只允许我将约束ON UPDATE CASCADE设置为xTicket和xState之间或xSubTicket和xState之间。

到目前为止,我发现了有关同一问题的其他问题,我要了解:要么正确更改数据库设计,要么使用INSTEAD OF Triggers。 - 我其实想知道为什么这个设计不被接受,我做错了什么?我该如何正确地做到这一点?

感谢您提前提出任何建议

1 个答案:

答案 0 :(得分:1)

  

我其实想知道为什么这个设计不被接受,

为什么你认为ti是不可接受的?这仅仅是SQL Server的限制。一个不方便的。

您可以自由编码并使用触发器进行级联操作。

我认为你的设计被破坏了,因为硬删除状态永远不会发生,你试图做数据库做清理可能会更复杂。我会去软删除(将状态标记为不可用于新对象),因此级联操作在那里没有任何意义。但这是另一个讨论,而不是你问题的主题。