一种约束,仅允许两个表中的一个引用基表

时间:2011-06-12 18:53:52

标签: sql sql-server sql-server-2008 constraints

我有3张桌子。一个基表,称之为表A,两个表引用表A,将它们称为表X和表Y.X和Y都有一个引用表A的外键约束.X和Y的外键也是它们自己的主键。

我想知道是否可以添加一个约束,只允许其中一个表包含一个引用表A的recrod。因此,如果X有一个引用A的记录,那么Y不能有一个如果Y有一个引用A的记录,则X不能有一个。

这可能吗?

谢谢,

2 个答案:

答案 0 :(得分:7)

使用UDF检查约束(这是Oded的答案)不能很好地扩展并且并发性差。见这些:

所以:

  • 创建一个新表,比如TableA2XY
  • 这有TableA的PK和带有CHECK的char(1)列,允许ony X或Y.对A的PK也有唯一约束。
  • tableX和tableY有新的char(1)列,检查只允许分别为X或Y
  • tableX和tableY在两列上都有FK到TableA2XY

这是超级键或子类型方法

  • 所有基于DRI
  • 没有触发器
  • 在CHECK约束中没有具有表访问权限的udfs。

答案 1 :(得分:1)

是的,可以使用CHECK constraints

除了正常的外键约束外,您还需要在两个引用表上添加CHECK constraint,以确保在其他引用表中不使用外键。

相关问题