Внешние ключи

Вспомните таблицы weather и cities из главы Язык SQL. Рассмотрим следующую проблему: Вы хотите убедиться, что никто не сможет вставить в таблицу погоды (weather) строки, у которых нет соответствующей записи в таблице городов (cities). Это ограничение называется поддержанием ссылочной целостности данных. В упрощенных системах баз данных это будет реализовано (если вообще будет реализовано) путем просмотра таблицы городов (cities) перед вставкой, чтобы проверить, существует ли соответствующая запись, а затем будут вставлены или отклонены новые записи о погоде. Этот подход имеет ряд проблем и очень неудобен, поэтому QHB может сделать это за вас.

Новое объявление таблиц будет выглядеть так:

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".

Поведение внешних ключей может быть настроено для вашего приложения, см. дополнительную информацию в главе Определение данных. Правильное использование внешних ключей улучшит качество ваших приложений баз данных, поэтому вам настоятельно рекомендуется узнать о них.