PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Qual è il modo migliore per modellare una relazione molti a molti

Un modello adeguato che consente tutto ciò di cui hai bisogno mentre applica l'integrità referenziale potrebbe assomigliare a questo:

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

Se lo stesso contatto non può mai ricoprire più di un ruolo per lo stesso prodotto, non includere il ruolo nella PK:

, PRIMARY KEY (product_id, contact_id)

Ciò consente di aggiungere semplicemente una riga a product_role per consentire e ulteriore tipo di contatto.

Se c'è solo una manciata di ruoli distinti, il tipo di dati "char" potrebbe essere conveniente per role_id .

Nozioni di base: