sql >> Database >  >> RDS >> PostgreSQL

Wat is de beste manier om een ​​veel-op-veel relatie te modelleren?

Een goed model dat alles toelaat wat je nodig hebt en tegelijkertijd de referentiële integriteit afdwingt, kan er als volgt uitzien:

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

Als dezelfde contactpersoon nooit meer dan één rol voor hetzelfde product kan vervullen, neem de rol dan niet op in de PK:

, PRIMARY KEY (product_id, contact_id)

Dit maakt het eenvoudig om een ​​rij toe te voegen aan product_role om een ​​extra type contact toe te staan.

Als er maar een handvol verschillende rollen is, is het gegevenstype "char" kan handig zijn voor role_id .

Basis:



  1. Trends in databasehardware en -infrastructuur

  2. Bouw dynamische WHERE-clausule in mySQL

  3. Hoe kan ik cx-oracle de resultaten van een query laten binden aan een woordenboek in plaats van aan een tuple?

  4. SQLite primaire sleutel