2016-04-27 115 views
1

我有两个表:外键相同的主键

用户

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_idjunior_id参考usersid列。

如何设定,让一个)可以保证两个senior_idjunior_idusers存在和b)deleteusers将级联和juniors删除删除ID的任何实例是否是一个senior_idjunior_id ?即在上面的例子中删除Jim会自动删除从后辈的第一个和最后一个记录。

我试着用两个单独的约束来做到这一点。但是如果我在两个约束条件下设置级联,我会得到'可能导致周期或多个级联路径'的错误。

如果我只在一个约束上设置它,那么删除将失败(在像Jim这样的情况下),因为它只能级联到其中一列,从而违反约束条件。

我必须要能够做到这一点的SQL Server 2005年

回答

0

插入之前在表晚辈删除FK constraint.For FK约束check.Create触发/ update.if ID现在要做的不存在,那么rollback.Again在DELETE上为用户创建另一个触发器,并在触发器写脚本中删除所有记录。由于FK不满足您的要求,因此没有必要保留一个额外的约束。

最重要的是我认为你的餐桌设计很糟糕。餐桌设计应该像Employee-Manager关系表一样,即在用户表中保留SeniorID。

如此多的问题将会消失。 同样没有任何额外的费用或并发症对此表上的任何查询

id | username SeniorID 
-------------- 
1 | James 
2 | John 
3 | Jack  2 
4 | Jim   5 
5 | Jane 
6 | Jessica 
+0

谢谢,我明白你说的表设计。不幸的是,我正在处理多对多的关系,即在这种情况下,初级可以有一个以上的老年人。所以将其包括在用户表中不会在这里工作。 – IamNaN

+0

哦!它不会在许多关系中工作。然后创建2触发器是最佳选择。 – KumarHarsh