参照整合性を適用しながら必要なすべてを可能にする適切なモデルは、次のようになります。
CREATE TABLE contact (
contact_id serial PRIMARY KEY
, name text
, phone text
, ...
);
CREATE TABLE product (
product_id serial PRIMARY KEY
, ...
);
CREATE TABLE product_role (
role_id int PRIMARY KEY
, role text UNIQUE
);
CREATE TABLE product_contact (
product_id int REFERENCES product
, contact_id int REFERENCES contact
, role_id int REFERENCES product_role
, PRIMARY KEY (product_id, contact_id, role_id)
);
同じ連絡先が同じ製品に対して複数の役割を演じることができない場合は、PKにその役割を含めないでください:
, PRIMARY KEY (product_id, contact_id)
これにより、product_role
に行を追加するだけで済みます。 追加のタイプの連絡先を許可します。
異なる役割でいっぱいの手しかない場合、データ型"char"
role_id
には便利かもしれません 。
基本: