Рассмотрим следующую проблему. Вы хотите убедиться, что никто не сможет вставить в таблицу строки, для которых нет соответствующей записи в таблице. Это называется поддержанием ссылочной целостности ваших данных. В упрощенных системах баз данных это было бы реализовано (если вообще было бы реализовано) путем сначала просмотра таблицы, чтобы проверить, существует ли совпадающая запись, а затем вставки или отклонения новых записей. Этот подход имеет ряд проблем и очень неудобен, поэтому PostgreSQL может сделать это за вас.citiesweathercitiescitiesweather
Новое объявление таблиц будет выглядеть так:
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
);
Теперь попробуйте вставить недопустимую запись:
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".
Поведение внешних ключей можно точно настроить для вашего приложения. Правильное использование внешних ключей определенно улучшит качество ваших приложений баз данных, поэтому вам настоятельно рекомендуется изучить их.
0 комментариев