我的数据库中有一个简单的数据模型,有三个表:
一张票可以有零到多个子邮箱。 每张票和每个小票都可以有一个州。
所以我的数据库看起来像这样:
之间:xTicket和xState我有约束:
on update cascade
/ on delete no action
(更改StateID
时更新xTicket
,更改xTicket
中的条目
之间:xSubTicket和xTicket我有约束:
on update cascade
/ on delete cascade
(更新TicketID
中的xSubTicket
并删除xTicket
中的条目时删除条目
但是当我想要与xTicket
和xState
相同的约束时:
on update cascade
/ on delete no action
我收到以下消息:
外键约束可能导致循环或多个级联路径
外键只允许我将约束ON UPDATE CASCADE
设置为xTicket和xState之间或xSubTicket和xState之间。
到目前为止,我发现了有关同一问题的其他问题,我要了解:要么正确更改数据库设计,要么使用INSTEAD OF Triggers
。 - 我其实想知道为什么这个设计不被接受,我做错了什么?我该如何正确地做到这一点?
感谢您提前提出任何建议
答案 0 :(得分:1)
我其实想知道为什么这个设计不被接受,
为什么你认为ti是不可接受的?这仅仅是SQL Server的限制。一个不方便的。
您可以自由编码并使用触发器进行级联操作。
我认为你的设计被破坏了,因为硬删除状态永远不会发生,你试图做数据库做清理可能会更复杂。我会去软删除(将状态标记为不可用于新对象),因此级联操作在那里没有任何意义。但这是另一个讨论,而不是你问题的主题。