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.