Reveja as tabelas clima e cidades no Capítulo 2. Considere o seguinte problema: Desejamos ter certeza que não serão inseridas linhas na tabela clima sem que haja um registro correspondente na tabela cidades. Isto é chamado de manter a integridade referencial dos dados. Em sistemas de banco de dados muito simples poderia ser implementado (caso fosse) olhando primeiro a tabela cidades para verificar se existe a linha correspondente e, depois, inserir ou rejeitar a nova linha de clima. Esta abordagem possui vários problemas, e é muito inconveniente, por isso o PostgreSQL pode realizar esta operação por você.
A nova declaração das tabelas ficaria assim:
CREATE TABLE cidades (
cidade varchar(80) PRIMARY KEY,
localizacao point
);
CREATE TABLE clima (
cidade varchar(80) REFERENCES cidades(cidade),
temp_min int,
temp_max int,
prcp real,
data date
);
Agora, ao se tentar inserir uma linha inválida:
INSERT INTO clima VALUES ('Berkeley', 45, 53, 0.0, '1994-11-28');
ERROR: insert or update on table "clima" violates foreign key constraint "clima_cidade_fkey"
DETAIL: Key (cidade)=(Berkeley) is not present in table "cidades".
-- Tradução da mensagem
ERRO: inserção ou atualização na tabela "clima" viola a restrição de chave estrangeira "clima_cidade_fkey"
DETALHE: Chave (cidade)=(Berkeley) não está presente na tabela "cidades".
O comportamento das chaves estrangeiras pode receber ajuste fino no aplicativo. Não iremos além deste exemplo simples neste tutorial, mas consulte o Capítulo 5 para obter informações adicionais. Com certeza o uso correto de chaves estrangeiras melhora a qualidade dos aplicativos de banco de dados, portanto incentivamos muito que se aprenda a usá-las.