PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Кой е най-добрият начин за моделиране на връзка много към много

Подходящ модел, който позволява всичко, от което се нуждаете, като същевременно налага референтна цялост, може да изглежда така:

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

Ако един и същ контакт никога не може да изпълнява повече от една роля за един и същ продукт, не включвайте ролята в PK:

, PRIMARY KEY (product_id, contact_id)

Това позволява просто да добавите ред към product_role за разрешаване и допълнителен тип контакт.

Ако има само ръка, пълна с отделни роли, типът данни "char" може да е удобно за role_id .

Основи:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да премахнете неизползваните временни файлове от управлявания от Google Cloud SQL Postgres?

  2. Как променяте кодирането на знаци на база данни на Postgres?

  3. Заключване за четене на ред на PostgreSQL

  4. Защо типът данни char се преобразува автоматично в bpchar?

  5. Как да изпратите JSON обект към вложен масив в JSONB колона