一尘不染

仅允许两个表之一引用基本表的约束

sql

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

我想知道是否有可能添加一个仅允许这些表之一包含引用表A的Recrod的约束。因此,如果X具有引用A的记录,则Y不能有一个,并且Y有一个记录,引用A,那么X不能有一个。

这可能吗?

谢谢,


阅读 141

收藏
2021-03-10

共1个答案

一尘不染

使用UDF的CHECK约束(这是Oded的回答)不能很好地扩展并且并发性很差。

所以:

  • 创建一个新表,例如TableA2XY
  • 它具有TableA的PK和带有CHECK的char(1)列,以允许仅X或Y。并且对A的PK也具有唯一约束。
  • tableX和tableY具有新的char(1)列,并带有检查以分别仅允许X或Y
  • tableX和tableY在两列上的FK均为TableA2XY

这是超键或子类型方法

  • 全部基于DRI
  • 没有触发器
  • CHECK约束中没有具有表访问权限的udfs。
2021-03-10