この記事では、PostgreSQLでのリレーションシップと外部キーについて詳しく解説します。具体的なコード例、その解説、そして応用例を2つ含めています。
目次
PostgreSQLとは
PostgreSQLは、オープンソースのオブジェクトリレーショナルデータベース管理システム(ORDBMS)です。多くの企業やプロジェクトで広く採用されています。
リレーションシップの基礎
データベースにおけるリレーションシップは、異なるテーブル間の関係を定義します。主に以下の3種類が存在します。
- 一対一(One to One)
- 一対多(One to Many)
- 多対多(Many to Many)
一対一(One to One)
一対一関係は、テーブルAの各レコードがテーブルBの一つのレコードとだけ関連する場合に使用されます。
-- テーブルAとテーブルBが一対一の関係
CREATE TABLE tableA (
id serial PRIMARY KEY,
name VARCHAR (50)
);
CREATE TABLE tableB (
id serial PRIMARY KEY,
tableA_id INT REFERENCES tableA(id),
description TEXT
);
外部キーについて
外部キーは、リレーションシップを作成するための制約の一つです。外部キー制約を設定することで、データの整合性を保つことができます。
-- 外部キー制約を持つテーブルC
CREATE TABLE tableC (
id serial PRIMARY KEY,
tableA_id INT,
FOREIGN KEY (tableA_id) REFERENCES tableA(id)
);
外部キー制約のオプション
外部キー制約には、いくつかのオプション(CASCADE, SET NULLなど)が存在し、これらを適用することでさまざまな動作を制御できます。
-- CASCADEオプション
ALTER TABLE tableC
ADD CONSTRAINT fk_tableA
FOREIGN KEY (tableA_id)
REFERENCES tableA(id)
ON DELETE CASCADE;
応用例
例1: 複数テーブルにまたがるクエリ
-- 複数テーブルにまたがるクエリの例
SELECT A.name, B.description
FROM tableA A
JOIN tableB B ON A.id = B.tableA_id;
例2: 外部キー制約を動的に追加・削除
-- 外部キー制約を追加
ALTER TABLE tableC
ADD CONSTRAINT fk_tableA
FOREIGN KEY (tableA_id)
REFERENCES tableA(id);
-- 外部キー制約を削除
ALTER TABLE tableC
DROP CONSTRAINT fk_tableA;
まとめ
この記事では、PostgreSQLでのリレーションシップと外部キーについて深掘りしました。基本的なリレーションシップの種類から、外部キー制約の詳細、そして具体的な応用例に至るまで、幅広い知識が必要とされるこのテーマに対する理解を深めることができたでしょうか。
コメント