Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Melaksanakan Perhubungan Banyak-ke-Banyak dalam PostgreSQL?

Bagaimanakah Saya Melaksanakan Perhubungan Banyak-ke-Banyak dalam PostgreSQL?

Susan Sarandon
Susan Sarandonasal
2025-01-22 14:57:13778semak imbas

How Do I Implement Many-to-Many Relationships in PostgreSQL?

Memodelkan Perhubungan Banyak-ke-Banyak dalam Pangkalan Data PostgreSQL

PostgreSQL, seperti sistem pangkalan data hubungan yang lain, membenarkan perhubungan yang kompleks antara jadual pangkalan data. Senario biasa ialah perhubungan banyak-ke-banyak, di mana berbilang rekod dalam satu jadual boleh dikaitkan dengan berbilang rekod dalam yang lain.

Mewujudkan Struktur Jadual

Melaksanakan perhubungan banyak-ke-banyak dalam PostgreSQL biasanya memerlukan jadual perantara ketiga. "Jadual simpang" atau "jadual jambatan" ini menghubungkan dua jadual asal. Ia mengandungi kunci asing yang merujuk kepada kunci utama kedua-dua jadual, membentuk kunci utama komposit (atau kekangan unik).

Mari kita ilustrasikan dengan contoh:

<code class="language-sql">CREATE TABLE product (
  product_id SERIAL PRIMARY KEY,
  product_name TEXT NOT NULL,
  price NUMERIC NOT NULL DEFAULT 0
);

CREATE TABLE invoice (
  invoice_id SERIAL PRIMARY KEY,
  invoice_number TEXT NOT NULL,
  invoice_date DATE NOT NULL DEFAULT CURRENT_DATE
);

CREATE TABLE invoice_product (
  invoice_id INTEGER REFERENCES invoice (invoice_id) ON UPDATE CASCADE ON DELETE CASCADE,
  product_id INTEGER REFERENCES product (product_id) ON UPDATE CASCADE,
  quantity NUMERIC NOT NULL DEFAULT 1,
  CONSTRAINT invoice_product_pkey PRIMARY KEY (invoice_id, product_id)
);</code>

Jadual Persimpangan dan Kekangan Utama Asing

Jadual invoice_product bertindak sebagai jadual simpang, menghubungkan invoice dan product. invoice_id dan product_id ialah kunci asing, memastikan integriti rujukan. Klausa ON UPDATE CASCADE dan ON DELETE CASCADE mengekalkan ketekalan data apabila rekod diubah suai atau dipadamkan dalam jadual utama.

Menguruskan Perhubungan

Apabila memasukkan atau memadamkan baris daripada jadual invoice atau product, tindakan melata pada kunci asing secara automatik mengemas kini atau mengalih keluar masukan berkaitan dalam jadual invoice_product, memudahkan pengurusan data.

Mendapatkan Data Berkaitan

Untuk menanyakan data merentas perhubungan banyak-ke-banyak ini, gunakan operasi JOIN. Contohnya, untuk mencari semua produk yang dikaitkan dengan invois tertentu:

<code class="language-sql">SELECT p.product_name, ip.quantity
FROM invoice i
JOIN invoice_product ip ON i.invoice_id = ip.invoice_id
JOIN product p ON ip.product_id = p.product_id
WHERE i.invoice_id = 123;</code>

Ringkasnya, mengurus perhubungan banyak-ke-banyak secara berkesan dalam PostgreSQL melibatkan penciptaan jadual persimpangan dengan kekangan kunci asing yang sesuai. Pendekatan ini memudahkan pemodelan data yang jelas dan pengambilan data yang cekap.

Atas ialah kandungan terperinci Bagaimanakah Saya Melaksanakan Perhubungan Banyak-ke-Banyak dalam PostgreSQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn