この記事では、PostgreSQL データベース内で多対多のリレーションシップを効率的に実装するという一般的な課題に対処します。 多対多の関係は、1 つのエンティティの複数のインスタンスを別のエンティティの複数のインスタンスに関連付けることができる、双方向の関連付けを意味します。 PostgreSQL は通常、ジャンクションまたは中間テーブルを使用してこれを処理します。
製品と請求書のシナリオを考えてみましょう。 1 つの製品が複数の請求書に記載される場合があり、1 つの請求書に複数の製品が含まれる場合があります。 Bill_Product
テーブルは、これら 2 つのエンティティをリンクするブリッジとして機能します。
次の SQL データ定義言語 (DDL) ステートメントは、堅牢な実装を示しています。
<code class="language-sql">CREATE TABLE product ( product_id SERIAL PRIMARY KEY, -- Auto-incrementing surrogate primary key product VARCHAR(255) NOT NULL, price NUMERIC NOT NULL DEFAULT 0 ); CREATE TABLE bill ( bill_id SERIAL PRIMARY KEY, bill VARCHAR(255) NOT NULL, billdate DATE NOT NULL DEFAULT CURRENT_DATE ); CREATE TABLE bill_product ( bill_id INTEGER REFERENCES bill (bill_id) ON UPDATE CASCADE ON DELETE CASCADE, product_id INTEGER REFERENCES product (product_id) ON UPDATE CASCADE, amount NUMERIC NOT NULL DEFAULT 1, CONSTRAINT bill_product_pkey PRIMARY KEY (bill_id, product_id) -- Composite primary key );</code>
このアプローチには、より単純な実装に対するいくつかの改善が組み込まれています。
SERIAL
列は主キーとして機能し、一意性を確保し、データ管理を簡素化します。NUMERIC
と price
に amount
を使用すると、金額の正確な表現が保証されます。REFERENCES
、ON UPDATE CASCADE
、ON DELETE CASCADE
) は、テーブル間のデータの一貫性を維持します。bill_product
) は複合主キー (bill_id
、product_id
) を使用し、一意のペアリングを保証します。この洗練された SQL 実装は、PostgreSQL での多対多の関係を管理するための、拡張性と信頼性の高いソリューションを提供します。 サロゲート キー、外部キー制約、および複合主キーを使用すると、データベース設計のベスト プラクティスを遵守しながら、データの整合性と効率的なデータ取得が保証されます。
以上がPostgreSQL で多対多の関係を効率的に実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。