PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Quelle est la meilleure façon de modéliser une relation plusieurs à plusieurs

Un modèle approprié qui permet tout ce dont vous avez besoin tout en appliquant l'intégrité référentielle pourrait ressembler à ceci :

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

Si le même contact ne peut jamais jouer plus d'un rôle pour le même produit, n'incluez pas le rôle dans le PK :

, PRIMARY KEY (product_id, contact_id)

Cela permet d'ajouter simplement une ligne à product_role pour autoriser un type de contact supplémentaire.

S'il n'y a qu'une poignée de rôles distincts, le type de données "char" peut être pratique pour role_id .

Notions de base :