[SQL Server来自2个表的一个外键

问题描述 投票:0回答:2

是否可以有一个可以引用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)) 

如果不可能,是否有建议的解决方法?

sql sql-server ssms
2个回答
2
投票

是的,您可以具有一个引用多个表的键。我[个人]称它们为“分叉外键”,但就是我。

但是,这些是两个单独的约束,它们始终单独执行。您不能使用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条件,则问题的答案为“否”。


0
投票

我猜您希望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未正确引用指定的表时,这会显示错误。

© www.soinside.com 2019 - 2024. All rights reserved.