仅当 t1.f3 在 Microsoft sql 服务器中为空时,如何允许字段 t1.f1 引用 t2.f2?

How to allow field t1.f1 to reference t2.f2 only if t1.f3 is null in microsoft sql server?

为了简单起见:假设我们有包含这些定义的表:

create table t1 (id int primary key, f1 int references t2(f2), f3 int references t1(id) )

create table t2 (id int primary key, f2 int)

是否可以做一个约束,只允许在 f3 为 null 时设置 f1?这将如何完成?

首先,让我们检查用例并将它们转换为布尔语句:

  • 如果没有设置f1(即null),没有问题,我们不关心f3。
  • 如果设置了f1(i.e.m,则不是 null),f3必须是null

这是一个简单的 or 条件 - f1 is null or f3 is null。一旦我们理解了这一点,添加 check 约束就是一件简单的事情:

ALTER TABLE t1 ADD CONSTRAINT t1_chk CHECK (f1 IS NULL OR f3 IS NULL)