Qual a vantagem de se usar chave estrangeira no banco de dados?

28/09/2016

Gostaria de uma boa resposta que justificasse o uso de chaves estrangeiras no banco de dados.
Já vi sistemas que não usavam chave estrangeira nas suas tabelas e aparentemente funcionavam bem.
Eu queria saber todas vantagens ou desvantagens no uso de chaves estrangeiras.

Melhor resposta

28/09/2016

Chave estrangeira é um tipo de "constraint", ou seja, restrição. E serve para restringir que dados errados sejam inseridos em uma tabela.
exemplo:

Tabela Carro Tabela Pessoa
Cod Nome Cod Nome
1 Celta 1 João
2 Uno 2 José
3 Palio 3 Mario

(nesse sistema fictício, só existem três carros)

(na tabela abaixo vamos preencher quem possui qual carro)

Tabela propriedade
Carro Pessoa
1 1
2 2
4 3

Você percebeu que o Carro 4 não existe?
Como é possível a pessoa 3 possuir um carro que não está cadastrado?
Isso é considerado uma inconsistência no banco de dados, que só aconteceu porque:
1 - Não existe chave estrangeria na tabela "Propriedade" ligando a coluna Carro a coluna Cod na tabela "Carro"
2 - Algum código no software está inserindo dado incorreto na tabela ou alguem executou um insert de forma errada.

ou seja, se houvesse chave estrangeira, esse registro

Carro Pessoa
4 3

nunca teria sido inserido.

Ronaldosantos

Responder Citar

Outras Respostas

28/09/2016

Calebe

Excelente resposta Ronaldo!
Responder Citar

28/09/2016

Ronaldosantos

Esqueci de dizer que a chave estrangeira também serve para prevenir que dados sejam apagados.
Considerando o exemplo acima:
Você não poderia apagar dados da tabela Carro se houver registros na tabela Propriedade pertinentes a tabela carro, dessa forma gerando registros "orfãos" na tabela Propriedade.

Você teria que apagar os dados na tabela Propriedade primeiro e somente após apagar dados na tabela Carro.
Responder Citar

28/09/2016

Jones Granatyr

Olá, pegando o gancho do comentário do Ronaldo, uma vez eu fiz a migração da base de dados de um sistema de ordens de serviço (da base antiga para a nova base com novo sistema). A ideia era a seguinte: uma ordem de serviço poderia ter muitos produtos, e o que o ocorreu quando peguei a base antiga era que mais de 4.000 desses produtos tinham sido apagados, ficando sem relação na tabela de ordens de serviço. Era impossível saber quais eram esses produtos e essas ordens de serviço (mais de 800), tiveram que ficar fora da importação para o sistema novo!! Ou seja, informação importante da empresa foi perdida por falta de chaves estrangeiras.

Jones
Responder Citar

28/10/2016

Calebe

Vlw gente pelo help!
Responder Citar

28/10/2016

Pestana

E também como todo tipo de chave ela contem índice que torna mais rápido o desempenho durante a consulta.
Responder Citar

31/10/2016

Calebe

Opa Pestana, ótima observação!
Responder Citar