第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章をご覧ください。外部キーを正しく使用するようにすると、間違いなくデータベースアプリケーションの質を向上させますので身に付くように励んでください。