PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Apa cara terbaik untuk memodelkan hubungan banyak ke banyak?

Model yang tepat yang memungkinkan semua yang Anda butuhkan saat menegakkan integritas referensial dapat terlihat seperti ini:

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

Jika kontak yang sama tidak pernah dapat berperan dalam lebih dari satu peran untuk produk yang sama, jangan sertakan peran dalam PK:

, PRIMARY KEY (product_id, contact_id)

Ini memungkinkan untuk menambahkan baris ke product_role untuk mengizinkan dan jenis kontak tambahan.

Jika hanya ada tangan yang penuh dengan peran yang berbeda, tipe data "char" mungkin nyaman untuk role_id .

Dasar-dasar:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengubah nilai zona waktu data

  2. Kesalahan urutan byte yang tidak valid saat memulihkan database PostgreSQL

  3. Bagaimana cara memetakan atribut integer model ke string?

  4. Rails:Tidak ada kumpulan koneksi untuk ActiveRecord::Base

  5. Penggunaan CPU 100% disebabkan oleh kueri postgres yang tidak diketahui