私は4つのテーブルを持っています
A(ida, name)
B(ida, B-specific stuff)
C(ida, C-specific stuff)
D(ida, D-specific stuff)
そして、別のテーブルEが(Dではなく)BまたはCだけを参照できるようにしたいと思います。何を書くことができますか
CREATE TABLE E
?
私は4つのテーブルを持っています
A(ida, name)
B(ida, B-specific stuff)
C(ida, C-specific stuff)
D(ida, D-specific stuff)
そして、別のテーブルEが(Dではなく)BまたはCだけを参照できるようにしたいと思います。何を書くことができますか
CREATE TABLE E
?
単純な垂直分割ではなく、ある種のスーパータイプ/サブタイプを使用しようとしているように思われます。もしそうなら、型弁別器を導入してください。
これは一般的な例(A、B、C、D ..)であるため、何が何に関連するかを推測するのは難しいので、ここに2つのオプションがあります。
オプション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
)
);