2

私は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

2 に答える 2

2

単純な垂直分割ではなく、ある種のスーパータイプ/サブタイプを使用しようとしているように思われます。もしそうなら、型弁別器を導入してください。

これは一般的な例(A、B、C、D ..)であるため、何が何に関連するかを推測するのは難しいので、ここに2つのオプションがあります。


オプション1

ここに画像の説明を入力してください


オプション2

ここに画像の説明を入力してください

于 2012-06-15T11:58:46.187 に答える
1

制約を使用して、参照または:のみcheckを強制することができます。DBC

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
        )
    );

SQLFiddleでの実例。

于 2012-06-15T08:49:44.793 に答える