3.3. Chaves estrangeiras

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 "$1"
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 "$1"
DETALHE:  Chave (cidade)=(Berkeley) não está presente na tabela "cidades"

O comportamento das chaves estrangeiras pode receber ajuste fino na aplicação. Não iremos além deste exemplo simples neste tutorial, mas consulte o Capítulo 5 para obter mais informações. 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.

SourceForge.net Logo