sql – 如何实现“条件外键”限制?

我有以下表定义:

CREATE TABLE X (
    A SOMETYPE NOT NULL,
    B SOMETYPE NOT NULL,
    C SOMETYPE NULL,
    PRIMARY KEY (A,B),
    FOREIGN KEY (A) REFERENCES Y (A)
);

我想添加以下约束:如果C IS NOT NULL,则FOREIGN KEY(A,C)REFERENCES X(A,B).我该怎么做(如果可能的话,不使用触发器)?

我使用的是SQL Server 2008 R2,但这与问题无关.

最佳答案 如果我得到你想要的东西你需要在表Y中的A上有一个主键,在表Y中有A,B的唯一约束.

试试这个:

create table Y
(
  A int not null,
  B int not null,
  primary key (A)
);

create unique index IX_Y_AB on Y(A, B);

create table X 
(
    A int not null,
    B int not null,
    C int null,
    primary key (A, B),
    foreign key (A) references Y(A),
    foreign key (A, C) references Y(A, B)
);

测试:

insert into Y values (1, 2)

insert into X values (1, 1, null) -- OK
insert into X values (1, 2, 2)    -- OK
insert into X values (1, 3, 3)    -- Fail
点赞