| Документация по PostgreSQL 8.4.2 | ||||
|---|---|---|---|---|
| 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 Правильное использование внешних ключей существенно увеличивает качество ваших приложений по работе с базами данных, так что мы очень рекомендуем вам научиться пользоваться ими.