是否可以有一个可以引用2个不同表的外键?
这是我的意思...
Create Table1(id nvarchar primary key);
Create Table2(id nvarchar primary key);
Create Table3(id nvarchar foreign key references (Table1(ID) or Table2(ID))
如果不可能,是否有建议的解决方法?
是的,您可以具有一个引用多个表的键。我[个人]称它们为“分叉外键”,但就是我。
但是,这些是两个单独的约束,它们始终单独执行。您不能使用OR
逻辑。
例如。
create Table1 (id nvarchar primary key);
create Table2 (id nvarchar primary key);
create Table3 (
id nvarchar,
constraint fk1 foreign key (id) references Table1 (ID),
constraint fk2 foreign key (id) references Table2 (ID)
);
如果您需要OR
条件,则问题的答案为“否”。
我猜您希望disjoint引用前两个表。
您可以非常接近持久化的计算列:
Create Table1 (
id nvarchar(255)
);
Create Table2 (
id nvarchar(255)
);
Create Table3 (
id nvarchar(255),
type int check (type in 1, 2),
id_1 as (case when type = 1 then id end) persisted,
id_2 as (case when type = 2 then id end) persisted,
foreign key (id_1) references table_1(id),
foreign key (id_2) references table_2(id)
);
Here是db <>小提琴。当ID未正确引用指定的表时,这会显示错误。