Uma referência conferida pelo banco
Chave estrangeira é uma coluna ou combinação de colunas sujeita a uma restrição de referência. Ela relaciona valores a uma chave válida, normalmente de outra tabela. Quando o vínculo é informado, o banco confere se existe um registro correspondente na chave referenciada.
Em um sistema de cursos, uma matrícula pode guardar o identificador do estudante inscrito. A chave estrangeira impede que esse identificador aponte para um cadastro inexistente. O nome da coluna, sozinho, não cria essa garantia.
A referência pode apontar para uma chave primária ou outra chave elegível segundo o banco. Também pode apontar para a própria tabela, como uma categoria que referencia sua categoria superior. O modelo precisa definir qual associação faz sentido.
Um vínculo obrigatório
CREATE TABLE estudantes (
id INTEGER PRIMARY KEY,
nome TEXT NOT NULL
);
CREATE TABLE matriculas (
id INTEGER PRIMARY KEY,
estudante_id INTEGER NOT NULL REFERENCES estudantes(id)
);REFERENCES declara a referência, e NOT NULL exige que ela seja informada. Sem a restrição de não nulo, uma chave estrangeira simples pode permitir ausência de vínculo. Uma matrícula sem identificador e outra com identificador inexistente são recusadas por restrições diferentes nesse exemplo.
O que acontece ao remover o registro referenciado
A ação depende da configuração. O banco pode impedir a remoção, propagar a exclusão com CASCADE ou atribuir nulo quando essa alternativa for permitida. Não existe uma consequência única para toda chave estrangeira.
Essa escolha precisa corresponder ao uso dos registros. Excluir um estudante e apagar automaticamente suas matrículas pode contrariar a necessidade de manter histórico. A estrutura deve refletir o comportamento definido para a aplicação antes de receber os cadastros reais.
Restrição e consulta têm funções diferentes
Uma chave estrangeira não cria automaticamente todas as consultas necessárias. A aplicação ainda precisa selecionar e combinar registros para apresentar uma matrícula com o nome do estudante. A restrição garante a relação declarada, enquanto a consulta define o resultado lido.
Também é preciso conferir a configuração do banco. No SQLite, por exemplo, a aplicação deve verificar se a fiscalização de chaves estrangeiras está habilitada para a conexão. Declarar a sintaxe sem conferir sua aplicação pode deixar uma expectativa sem efeito.
Como verificar o vínculo
No banco de desenvolvimento do exemplo, tente gravar matrículas com o estudante 7, com o estudante inexistente 99 e sem estudante informado. Compare as mensagens e os registros persistidos para distinguir referência válida, referência inexistente e ausência proibida. Depois, teste a exclusão do cadastro referenciado conforme a ação configurada, conferindo também o que acontece com a matrícula.
Quando a referência for composta, prepare os testes com a combinação completa de colunas. A existência de cada valor isolado em linhas diferentes não comprova a existência da combinação referenciada.
O verbete de relacionamento explica como o vínculo técnico representa uma associação do modelo.
Dúvidas frequentes
Perguntas frequentes sobre Chave estrangeira
- Um campo terminado em _id cria uma chave estrangeira?
- O nome não cria a restrição. Ela precisa ser declarada e efetivamente aplicada pelo banco utilizado.
- Chave estrangeira exige sempre um valor?
- Uma referência simples pode aceitar nulo quando a coluna permite. A restrição NOT NULL exige o preenchimento, enquanto a chave estrangeira confere a existência do registro referenciado.
- Excluir o registro referenciado sempre é proibido?
- O efeito depende da ação configurada, como impedir a exclusão, propagar com CASCADE ou atribuir nulo quando permitido.
- A chave estrangeira comprova uma regra de negócio?
- Ela confere a referência declarada, mas não comprova condições como situação ativa do estudante ou permissão para matrícula. A aplicação precisa verificar essas condições antes de aceitar a inscrição.
Para continuar
Recursos relacionados
Documentação
Restrições de tabela no PostgreSQL
Documenta chaves, unicidade, referências e restrições de valores.
Abrir recursoDocumentação
Chaves estrangeiras no SQLite
Explica habilitação, referências e ações de chaves estrangeiras no SQLite.
Abrir recursoSite de referência
Desenvolvimento Colaborativo da Dev Side Studio
Conheça o acompanhamento técnico ao vivo para conferir referências entre tabelas e o tratamento de alterações nos registros vinculados.
Abrir recursoAplicação na formação
Formação DevOps
Chaves estrangeiras permitem conferir os vínculos que serviços e rotinas mantêm entre tabelas da aplicação.
Conhecer a formação
Fontes consultadas
Referências deste verbete
Este verbete ajudou você?
Obrigado pela resposta. Ela fica salva apenas neste navegador.