外键还是列?

时间:2013-06-25 14:40:50

标签: sql

是否可能有一个外键需要列A或列B具有值,但不能同时具有值​​。列A的外键与表1匹配,列B的外键与表2相匹配

3 个答案:

答案 0 :(得分:4)

检查约束可以处理此问题。如果这是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

答案 1 :(得分:2)

这取决于您正在使用的数据库。如果您希望表格FooTable1Table2之间存在FK关系但一次只有一个,那么您需要设置某种{{3} (我的链接假定​​SQL Server,但想法是相同的)或trigger来强制执行只有一列有值的规则。

答案 2 :(得分:1)

在应用外键时,列中没有必要包含值,但列名称和数据类型相同。