首頁 >資料庫 >mysql教程 >如何使用連接表在 PostgreSQL 中實現多對多關係?

如何使用連接表在 PostgreSQL 中實現多對多關係?

DDD
DDD原創
2025-01-22 15:02:11140瀏覽

How to Implement Many-to-Many Relationships in PostgreSQL Using Junction Tables?

在PostgreSQL中使用連接表實現多對多關係

理解多對多關係

在多對多關係中,單一實體可以與多個其他實體關聯,反之亦然。要在資料庫中表示這一點,通常使用稱為「連接表」的單獨表。

在PostgreSQL中建立表格結構

要在PostgreSQL中建立多對多關係,您首先需要定義兩個主表,然後建立連接表。

<code class="language-sql">CREATE TABLE product (
  product_id serial PRIMARY KEY  -- 隐式主键约束
, product    text NOT NULL
, price      numeric NOT NULL DEFAULT 0
);

CREATE TABLE bill (
  bill_id  serial PRIMARY KEY
, bill     text NOT NULL
, billdate date NOT NULL DEFAULT CURRENT_DATE
);

CREATE TABLE bill_product (
  bill_id    int REFERENCES bill (bill_id) ON UPDATE CASCADE ON DELETE CASCADE
, product_id int REFERENCES product (product_id) ON UPDATE CASCADE
, amount     numeric NOT NULL DEFAULT 1
, CONSTRAINT bill_product_pkey PRIMARY KEY (bill_id, product_id)  -- 显式主键
);</code>

表結構的關鍵特性

  • Product: 代表具有名稱和價格的單一產品。
  • Bill: 代表具有描述和日期的單一帳單。
  • Bill_Product: 建立多對多關係的連接表。它包含指向Product和Bill表的兩個外鍵,以及每個組合的amount列。

注意事項

  • 代理主鍵: 我們已將serial列定義為Product和Bill表的代理主鍵。這些是由系統自動產生的唯一整數值,這使得在查詢中連接表更有效率。
  • 命名約定: 我們遵循一致的命名約定,對錶使用單數名詞,對列名使用小寫字母。
  • 資料類型: 我們選擇了適當的資料類型,例如數字類型的價格和日期類型的帳單日期,以確保準確性。
  • 外鍵: 外鍵已定義為ON UPDATE CASCADE和ON DELETE CASCADE,以便自動傳播變更或刪除。
  • NOT NULL限制: 我們已將所有欄位定義為NOT NULL,以強制執行資料完整性。
  • 索引: 將在Bill_Product表的主鍵上自動建立索引,從而加快查詢速度。

以上是如何使用連接表在 PostgreSQL 中實現多對多關係?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn