Správný model, který umožňuje vše, co potřebujete při vynucování referenční integrity, by mohl vypadat takto:
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)
);
Pokud stejný kontakt nikdy nemůže vystupovat ve více než jedné roli pro stejný produkt, nezahrnujte roli do PK:
, PRIMARY KEY (product_id, contact_id)
To umožňuje jednoduše přidat řádek do product_role
pro povolení a další typ kontaktu.
Pokud existuje pouze ruka plná různých rolí, datový typ "char"
může být vhodné pro role_id
.
Základy: