RDBMS での外部キー制約について検証

外部キーの参照先はただ一つのタプルに限定されることが保証されていなえければならない(=UNIQ 制約がかかっていなければならない)、という点を検証するための SQL のメモ。

最後のテーブルでエラーが出る。

create table parent(id integer primary key,
                    id_for_three integer unique,
                    id_for_four integer,
                    name text);

create table child
  (
    id integer primary key,
    parent_id integer,
    name text,
    constraint parent_id_ref foreign key (parent_id) references parent(id)
  );

create table child_two
  (
    id integer primary key,
    name text,
    constraint parent_id_ref_two foreign key (id) references parent(id)
  );

create table child_three
  (
    id integer primary key,
    parent_id integer,
    name text,
    constraint parent_id_ref_three foreign key (parent_id) references parent(id_for_three)
  );

create table child_four
  (
    id integer primary key,
    parent_id integer,
    name text,
    constraint parent_id_ref_three foreign key (parent_id) references parent(id_for_four)
  );