我有 4 张桌子
A(ida, name)
B(ida, B-specific stuff)
C(ida, C-specific stuff)
D(ida, D-specific stuff)
我希望另一个表 E 可以仅引用 B OR C(而不是 D)。我可以在里面写什么
CREATE TABLE E
?
我有 4 张桌子
A(ida, name)
B(ida, B-specific stuff)
C(ida, C-specific stuff)
D(ida, D-specific stuff)
我希望另一个表 E 可以仅引用 B OR C(而不是 D)。我可以在里面写什么
CREATE TABLE E
?
在我看来,您正在尝试使用某种超类型/子类型——而不是简单的垂直分区。如果是这样,请引入类型鉴别器。
因为这是通用示例(A、B、C、D ..),所以很难猜测什么与什么相关,所以这里有两个选项作为我的最佳猜测。
选项1

选项 2

您可以使用check约束来强制D仅引用B或C:
create table D
    (
    id int constraint PK_D primary key,
    idb int constraint FK_D_IDB foreign key references B(id),
    idc int constraint FK_D_IDC foreign key references C(id),
    constraint CHK_D_B_OR_C check 
        (
        case when idb is null then 0 else 1 end + 
        case when idc is null then 0 else 1 end = 1
        )
    );