Definição
Chave estrangeira é a coluna ou o conjunto de colunas que referencia uma chave válida, normalmente a chave primária de outra tabela. Ela transforma uma referência escrita no cadastro em um vínculo conferido pelo banco.
Localizar a referência no cadastro
No cadastro de pedidos, o campo cliente_id guarda o identificador do cliente que fez a compra. Sem uma chave estrangeira, o banco aceita qualquer número nesse campo, inclusive um que não corresponda a cliente algum. Com a restrição, cada valor precisa existir na tabela clientes.
CREATE TABLE pedidos (
id INTEGER PRIMARY KEY,
cliente_id INTEGER,
FOREIGN KEY (cliente_id) REFERENCES clientes (id)
);Nessa estrutura, o banco compara o cliente_id gravado com os valores da coluna id da tabela clientes. A conferência acontece na gravação, e não apenas na hora de ler, o que muda o comportamento quando alguém tenta gravar um identificador que não existe.
Referência não é restrição
Ter uma coluna terminada em _id não cria, sozinho, uma chave estrangeira. O vínculo só existe quando a restrição é declarada no banco. A nomenclatura facilita a leitura do cadastro e evita dúvida ao consultar o esquema, mas é a constraint que garante o comportamento.
Falha comum e como verificar
A falha mais comum é gravar o valor sem declarar a restrição, porque a coluna aceita qualquer número e o erro só aparece quando alguém consulta um vínculo sem destino. Se a tabela pedidos guardar cliente_id 99 sem existir cliente 99, a consulta do pedido devolve um registro que não conversa com o cadastro. Para verificar, tente inserir um pedido com um cliente inexistente e observe a resposta do banco: com a chave estrangeira ativa, a gravação é recusada e a falha aparece na origem. Sem a restrição, a gravação passa e o problema só é percebido depois. A verificação vale também para remoções, pois excluir o cliente que ainda possui pedidos pode ser impedido pela restrição.
Veja a chave que a referência apontaDúvidas frequentes
Perguntas frequentes sobre Chave estrangeira
- O que a chave estrangeira garante?
- Que o valor apontado exista na tabela referenciada, preservando a consistência entre os registros.
- Uma coluna terminada em _id cria uma chave estrangeira?
- Não. A restrição precisa ser declarada explicitamente no banco. Apenas o nome do campo não cria vínculo.
- A chave estrangeira sempre aponta para outra tabela?
- Em geral sim, mas também pode apontar para uma chave da própria tabela, como em registros com hierarquia.
Para continuar
Recursos relacionados
Documentação
PostgreSQL: foreign keys
Apresenta como declarar chaves estrangeiras e o que elas protegem.
Abrir recursoDocumentação
SQLite: foreign key support
Explica a ativação e o comportamento das chaves estrangeiras no SQLite.
Abrir recursoAplicação na formação
Formação DevOps
Na Formação DevOps, a chave estrangeira protege a consistência entre tabelas quando serviços e rotinas gravam registros vinculados.
Conhecer a formaçãoFontes consultadas
Referências deste verbete
Este verbete ajudou você?
Obrigado pela resposta. Ela fica salva apenas neste navegador.