Внешние ключи (Foreign Keys)

3.3. Внешние ключи (Foreign Keys)

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

Back to top

(С) Виктор Вислобоков, 2008-2010