ホームページ > データベース > mysql チュートリアル > ジャンクション テーブルを使用して PostgreSQL で多対多のリレーションシップを実装するにはどうすればよいですか?

ジャンクション テーブルを使用して PostgreSQL で多対多のリレーションシップを実装するにはどうすればよいですか?

DDD
リリース: 2025-01-22 15:02:11
オリジナル
140 人が閲覧しました

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

結合テーブルを使用して PostgreSQL で多対多の関係を実装する

多対多の関係を理解する

多対多の関係では、単一のエンティティを他の複数のエンティティに関連付けることができ、その逆も同様です。これをデータベースで表現するには、通常、「結合テーブル」と呼ばれる別のテーブルが使用されます。

PostgreSQL でテーブル構造を作成する

PostgreSQL で多対多の関係を作成するには、まず 2 つのメイン テーブルを定義し、次に結合テーブルを作成する必要があります。

<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>
ログイン後にコピー

テーブル構造の主な特徴

  • 製品: は、名前と価格を持つ単一の製品を表します。
  • 請求書: は、説明と日付が記載された単一の請求書を表します。
  • Bill_Product: 多対多の関係のための接続テーブルを作成します。これには、Product テーブルと Bill テーブルへの 2 つの外部キーと、各組み合わせの金額列が含まれています。

メモ

  • サロゲート主キー: Product テーブルと Bill テーブルのサロゲート主キーとしてシリアル列を定義しました。これらはシステムによって自動的に生成される一意の整数値であり、クエリでのテーブルの結合がより効率的になります。
  • 命名規則: テーブルには単数名詞を使用し、列名には小文字を使用する、一貫した命名規則に従っています。
  • データ型: 正確性を確保するために、数値型としての価格や日付型としての請求日など、適切なデータ型を選択しました。
  • 外部キー: 外部キーは、変更または削除を自動的に反映するために ON UPDATE CASCADE および ON DELETE CASCADE として定義されています。
  • NOT NULL 制約: データの整合性を強制するために、すべての列を NOT NULL として定義しました。
  • Index: は Bill_Product テーブルの主キーにインデックスを自動的に作成するため、クエリが高速化されます。

以上がジャンクション テーブルを使用して PostgreSQL で多対多のリレーションシップを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート