一尘不染

或列的外键?

sql

是否有可能需要一个A列或B列具有一个值,但不是两者都具有的外键。并且A列的外键匹配表1,B列的外键匹配表2?


阅读 238

收藏
2021-03-10

共1个答案

一尘不染

检查约束可以解决这个问题。如果这是SQL Server,则将执行以下操作:

create table A (Id int not null primary key)
go
create table B (Id int not null primary key)
go
create table C (Id int not null primary key, A_Id int null, B_Id int null)
go
alter table C add constraint FK_C_A
foreign key (A_Id) references A (Id)
go
alter table C add constraint FK_C_B
foreign key (B_Id) references B (Id)
go
alter table C add constraint CK_C_OneIsNotNull
check (A_Id is not null or B_Id is not null)
go
alter table C add constraint CK_C_OneIsNull
check (A_Id is null or B_Id is null)
go
2021-03-10