sql >> Databasteknik >  >> RDS >> PostgreSQL

Vilket är det bästa sättet att modellera ett många till många förhållande

En riktig modell som tillåter allt du behöver samtidigt som den upprätthåller referensintegritet kan se ut så här:

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

Om samma kontakt aldrig kan agera i mer än en roll för samma produkt, inkludera inte rollen i PK:

, PRIMARY KEY (product_id, contact_id)

Detta gör det möjligt att helt enkelt lägga till en rad i product_role för att tillåta och ytterligare typ av kontakt.

Om det bara finns en hand full av distinkta roller, datatypen "char" kan vara praktiskt för role_id .

Grunderna:



  1. Rangordna resultaten i mysql (mysql-ekvivalenter för funktionerna 'dense_rank()' eller 'row_number()' i oracle)

  2. Den angivna nyckeln var för lång; max nyckellängd är 767 byte - ASPNet Identity MySQL

  3. Ändra formatet för datum

  4. Bästa praxis för att designa användarroller och behörighetssystem?