Документация по PostgreSQL 9.1.1 | ||||
---|---|---|---|---|
Prev | Fast Backward | Chapter 3. Расширенные возможности | Fast Forward | Next |
Посмотрите на таблицы weather
и
cities
из Chapter 2. На лицо следующая проблема: Вы хотите
быть уверенными, что каждая из строк в таблице
weather
имеет соответствующую строку в
таблице cities
. Это называется
обслуживанием ссылочной целостности ваших
данных. В простейших СУБД вам потребовалось бы реализовать
сперва просмотр таблицы cities
, чтобы
проверить существование нужной строки и только затем решить
вставлять или отвергнуть вставку новых строк данных в таблицу
weather
. Такое решение создает некоторые
проблемы и очень неудобно, так что
PostgreSQL может сделать это для вас.
Новое описание этих таблиц будет выглядеть так:
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". что означает ОШИБКА: оператор insert или update для таблицы "weather" нарушает ограничение внешнего ключа "weather_city_fkey" ПОДРОБНОСТИ: Ключ (city)=(Berkeley) не найден в таблице "cities".
Поведение внешних ключей может быть прекрасно использовано вашим приложением. Мы не ограничиваемся только этим простым примером в данном учебнике, но отсылаем вас за подробностями к Chapter 5 Правильное использование внешних ключей существенно увеличивает качество ваших приложений по работе с базами данных, так что мы очень рекомендуем вам научиться пользоваться ими.