Qual a vantagem de se usar chave estrangeira no banco de dados?
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.
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.
Calebe Menezes
Curtidas 0
Melhor post
Ronaldo Santos
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.
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.
GOSTEI 7
Mais Respostas
Calebe Menezes
28/09/2016
Excelente resposta Ronaldo!
GOSTEI 2
Ronaldo Santos
28/09/2016
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.
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.
GOSTEI 3
Jones Granatyr
28/09/2016
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
Jones
GOSTEI 3
Calebe Menezes
28/09/2016
Vlw gente pelo help!
GOSTEI 0
Pestana
28/09/2016
E também como todo tipo de chave ela contem índice que torna mais rápido o desempenho durante a consulta.
GOSTEI 2
Calebe Menezes
28/09/2016
Opa Pestana, ótima observação!
GOSTEI 0