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

Dun*_*ill 5 sql sql-server constraints sql-server-2008

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

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

这可能吗?

谢谢,

gbn*_*gbn 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.