無料スクリプト配布のPHP.TO   PHPの実用的なtips PHPマニュアル MySQLマニュアル Apacheマニュアル PostgreSQLマニュアル マニュアル検索    

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


powered by SEO.CUG.NET