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