Reveja as tabelas clima e
cidades no Capítulo 2.
Considere o seguinte problema: desejamos ter certeza de que não serão
inseridas linhas na tabela clima sem que
haja uma entrada correspondente na tabela
cidades. Isso é 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.
Essa abordagem possui vários problemas, sendo muito inconveniente,
por isso o PostgreSQL pode fazer isso para
você.
A nova declaração das tabelas ficaria assim:
CREATE TABLE cidades (
nome varchar(80) PRIMARY KEY,
localizacao point
);
CREATE TABLE clima (
cidade varchar(80) REFERENCES cidades(nome),
temp_min int,
temp_max int,
prcp real,
data date
);
Agora vamos tentar inserir um registro inválido:
INSERT INTO clima (data, cidade, temp_min, temp_max)
VALUES ('2022-06-29', 'Rio de Janeiro - RJ', 17, 29);
ERRO: inserção ou atualização em tabela "clima" viola restrição de chave estrangeira "clima_cidade_fkey"
DETALHE: Chave (cidade)=(Rio de Janeiro - RJ) não está presente na tabela "cidades".
O comportamento das chaves estrangeiras pode receber ajuste fino na aplicação. Não iremos além desse exemplo simples nesse tutorial, mas consulte o Capítulo 5 para obter informações adicionais. Com certeza o uso correto de chaves estrangeiras melhora a qualidade das aplicações de banco de dados, portanto incentivamos muito que se aprenda a usá-las.