日期:2014-05-17  浏览次数:20411 次

SQL表中,外键值的限制在2个表中该如何建立
现在有
表A:
ID uniqueidentifier
aID uniqueidentifier null

表B:
ID uniqueidentifier

问题:
现在A中 aID 的值可以为null,或者是表A,表B中的ID列值,
这个限制条件是用外键建立么?怎么建立?
还是用别的方法?

如果外键只是从一个表中取,这个很简单,但是我不知道怎么从两个表中取。现在能想到的只能是在表A,B后建立触发器,表更新的话,把ID值存入另外第三个表中,然后外键建立在这个表上。但是这个方法太dirty,我不喜欢。

求指点,方法尽量简便。


------解决方案--------------------
你这需求挺特殊的,帮顶
------解决方案--------------------
外键从两个表里取,肯定是不可以的。
想实现约束的话,只能使用触发器,你现在的方法也可以。
还有个方法,就是在A表建触发器,插入时,判断插入的aid值,是否在A表和B表中存储,进行相应的控制。

INSTEAD OF 触发器代替触发动作进行激发,并在处理约束之前激发。


------解决方案--------------------
触发器是自动触发的,一个不漏。
------解决方案--------------------
探讨

引用:

外键从两个表里取,肯定是不可以的。
想实现约束的话,只能使用触发器,你现在的方法也可以。
还有个方法,就是在A表建触发器,插入时,判断插入的aid值,是否在A表和B表中存储,进行相应的控制。

INSTEAD OF 触发器代替触发动作进行激发,并在处理约束之前激发。

也是个方法,但是不是我想要的.
其实不做外键,在存储过程中可以判断插入的aid值,……

------解决方案--------------------
可能从一个表中判断这种很常见,主外键关系
你这只是多了一个判断,newid 是不会重复的,
所以这种验证完全不用担心分别去判断两次会导致不严谨的事情发生。

------解决方案--------------------
这个需求是有点。。。。。
不过这个东西没你想的那么难,你在aID字段上,先建立一个check约束,检测是否在表A的ID中,然后在建立B表的外键就搞定了。
------解决方案--------------------
想法有新意,帮顶
------解决方案--------------------
你这样如何判断一个aID是A表中的ID还是B表中的ID呢?有关系也麻烦啊,每次关联需要扫描2张表。