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

Hvad er den bedste måde at modellere et mange til mange forhold

En ordentlig model, der tillader alt, hvad du har brug for, og samtidig håndhæver referentiel integritet, kunne se sådan ud:

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

Hvis den samme kontakt aldrig kan optræde i mere end én rolle for det samme produkt, skal du ikke inkludere rollen i PK:

, PRIMARY KEY (product_id, contact_id)

Dette gør det muligt blot at tilføje en række til product_role for at tillade og yderligere type kontakt.

Hvis der kun er en hånd fuld af distinkte roller, er datatypen "char" kan være praktisk til role_id .

Grundlæggende:



  1. PostgreSQL:unik begrænsning eller unikt indeks

  2. SQL multiple SELECT-forespørgsel med xmlagg-funktion - Data blev ikke trukket på den krævede måde

  3. ORACLE SQL*Plus Tutorial

  4. Få kan ikke commit, når autocommit er aktiveret undtagelse, mens du arbejder med CachedRowSet i JDBC