3.3. 外部キー

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

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

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

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

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

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

ERROR:<unnamed> referential integrity violation - key referenced from weather not found in cities

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