PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Cách tốt nhất để mô hình hóa mối quan hệ nhiều người

Một mô hình phù hợp cho phép mọi thứ bạn cần trong khi thực thi tính toàn vẹn tham chiếu có thể trông như thế này:

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

Nếu cùng một địa chỉ liên hệ không bao giờ có thể hoạt động nhiều hơn một vai trò cho cùng một sản phẩm, thì đừng bao gồm vai trò đó trong PK:

, PRIMARY KEY (product_id, contact_id)

Điều này cho phép chỉ cần thêm một hàng vào product_role để cho phép và loại liên hệ bổ sung.

Nếu chỉ có một bàn tay chứa đầy các vai trò riêng biệt, thì kiểu dữ liệu "char" có thể thuận tiện cho role_id .

Khái niệm cơ bản:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để có được kích thước của một cột ARRAY?

  2. Chơi Không thể kết nối với cơ sở dữ liệu (PostgreSQL) [mặc định]

  3. LỖI:kích thước mảng vượt quá mức tối đa cho phép (1073741823)

  4. Hiểu cách tối ưu hóa truy vấn thông qua dữ liệu giải thích Postgres / rails

  5. Cách chọn bản ghi từ 24 giờ qua trong PostgreSQL