Recall the <classname>weather</classname> and
<classname>cities</classname> tables from <xref
linkend="tutorial-sql"/>. Consider the following problem: You
want to make sure that no one can insert rows in the
<classname>weather</classname> table that do not have a matching
entry in the <classname>cities</classname> table. This is called
maintaining the <firstterm>referential integrity</firstterm> of
your data. In simplistic database systems this would be
implemented (if at all) by first looking at the
<classname>cities</classname> table to check if a matching record
exists, and then inserting or rejecting the new
<classname>weather</classname> records. This approach has a
number of problems and is very inconvenient, so
<productname>PostgreSQL</productname> can do this for you.
第2章のweather
テーブルとcities
テーブルを思い出してください。
次のような問題点を考えてみましょう。
cities
テーブルに一致する項目がない行は絶対にweather
テーブルに挿入できなくしたいとします。
これをデータの参照整合性の保全と呼びます。
最も単純なデータベースシステムでこれを実装するとしたら、まずcities
テーブルに一致する行が存在するかどうかを確認し、それからweather
テーブルに新規レコードを追加する、あるいは拒絶する、といったことになるでしょう。
この手法には多くの問題があること、そしてとても不便であることから、PostgreSQLに代わって作業させることができます。
The new declaration of the tables would look like this: これらのテーブルの新しい宣言は以下になります。
CREATE TABLE cities ( name varchar(80) primary key, location point ); CREATE TABLE weather ( city varchar(80) references cities(name), temp_lo int, temp_hi int, prcp real, date date );
Now try inserting an invalid record: では無効なレコードを挿入してみましょう。
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".
The behavior of foreign keys can be finely tuned to your application. We will not go beyond this simple example in this tutorial, but just refer you to <xref linkend="ddl"/> for more information. Making correct use of foreign keys will definitely improve the quality of your database applications, so you are strongly encouraged to learn about them. 外部キーの動作はアプリケーションごとに細かく調整できます。 このチュートリアルではこの簡単な例より先には進みませんが、さらに情報がほしい方は第5章をご覧ください。 外部キーを正しく使用するようにすると、間違いなくデータベースアプリケーションの質を向上させますので身に付くように励んでください。