Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Melaksanakan Perhubungan Banyak-ke-Banyak dalam 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.
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 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.
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.
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!