我有两张桌子:
用户
id | username
--------------
1 | James
2 | John
3 | Jack
4 | Jim
5 | Jane
6 | Jessica
大三
senior_id | junior_id
-----------------------
1 | 4
1 | 6
2 | 3
4 | 5
senior_id
和junior_id
都引用了users
表的id
列。
如何设置以便a)保证senior_id
和junior_id
都存在于users
和b)delete
来自users
会从juniors
级联并删除已删除ID的所有实例,无论是senior_id
还是junior_id
?即在上面的示例中删除Jim将自动从青少年中删除第一个和最后一个记录。
我尝试用两个单独的约束来做这件事。但是如果我在两个约束条件下设置级联,我会得到一个'可能会导致循环或多个级联路径'错误。
如果我只在一个约束上设置它,那么删除失败(在像Jim这样的情况下)因为它只级联到其中一个列,因此违反了约束。
我必须能够在SQL Server 2005上执行此操作。
答案 0 :(得分:0)
删除FK约束。对于FK约束检查。在insert / update.if id之前创建表juniors上的触发器,然后rollback.Again现在在表上创建另一个触发器User for DELETE.and在trigger write script中删除所有记录。因为FK不符合您的要求,因此没有必要保留一个额外的约束。
最重要的是,我认为你的表设计很糟糕。表设计应该像Employee-Manager关系表,即将UserID保存在用户表中。
你的许多问题都会消失。 此表上的任何查询都没有额外的成本或复杂性
id | username SeniorID
--------------
1 | James
2 | John
3 | Jack 2
4 | Jim 5
5 | Jane
6 | Jessica