PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jaki jest najlepszy sposób na modelowanie relacji wiele do wielu

Właściwy model, który pozwala na wszystko, czego potrzebujesz, jednocześnie egzekwując integralność referencyjną, może wyglądać tak:

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

Jeśli ten sam kontakt nigdy nie może działać w więcej niż jednej roli dla tego samego produktu, nie dołączaj tej roli do PK:

, PRIMARY KEY (product_id, contact_id)

Pozwala to po prostu dodać wiersz do product_role aby zezwolić i dodatkowy rodzaj kontaktu.

Jeśli istnieje tylko garstka różnych ról, typ danych "char" może być wygodne dla role_id .

Podstawy:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak znaleźć ścieżkę pg_config

  2. postgres i pyton

  3. Postgres:zaktualizuj sekwencję klawiszy podstawowych dla wszystkich tabel

  4. Umieszczasz dane wyjściowe z wejścia Postgres \i do pliku?

  5. Błąd gniazda Postgresql w OSX 10.7.3 podczas uruchamiania syncdb Django