外部キー

PostgreSQL 8.4.1文書
前のページ | 巻戻し | 第 3章高度な諸機能 | 早送り | 次のページ

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

前のページ | ホーム | 次のページ
ビュー | 上に戻る | トランザクション