Внешние ключи
Вспомните таблицы 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".
Поведение внешних ключей может быть настроено для вашего приложения, см. дополнительную информацию в главе Определение данных. Правильное использование внешних ключей улучшит качество ваших приложений баз данных, поэтому вам настоятельно рекомендуется узнать о них.