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 "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.

SourceForge.net Logo CSS válido!