他のバージョンの文書 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

3.3. 外部キー

第2章weather テーブルと cities テーブルを思い出してください。つぎのような問題点を考えてみましょう。cities テーブルに一致する項目が無い行は絶対に weather テーブルに挿入できなくしたいとします。これをデータの参照整合性の保全と呼びます。最も単純なデータベースシステムでは cities テーブルに一致する行が存在するかどうかを最初に検証してから新規 weather レコードを追加するか否かの実装をしなければなりません。この手法には多くの問題があること、そしてとても不便ですので PostgreSQL が代わって作業してくれます。

新規のテーブルの宣言はこのようになります

CREATE TABLE cities (
         city     varchar(80) primary key,
	 location point
);

CREATE TABLE weather (
	city      varchar(80) references cities(city),
	temp_lo   int,
	temp_hi   int,
	prcp      real,
	date      date
);

では無効なレコードを挿入してみましょう。

INSERT INTO weather VALUES ('Berkeley', 45, 53, 0.0, '1994-11-28');

ERROR:  insert or update on table "weather" violates foreign key constraint "weather_city_fkey"
DETAIL:  Key (city)=(Berkeley) is not present in table "cities".

外部キーによる振舞がアプリケーションに見事に調和されました。このチュートリアルではこの簡単な例題より先には進みませんが、さらに情報が欲しい方は 第5章 をご覧ください。外部キーを正しく使用するようにすると間違いなくデータベースアプリケーションの質を向上させますので身につくように励んでください。