Boa tarde a todos,
Minha duvida é mais para saber se o modo como estou fazendo está correto ou tem alguma forma mais eficiente de ser realizado. Eu tenho 2 tabelas no meu sistema (Cliente e Endereço) e ao remover um cliente eu primeiro dou um DELETE no endereço e em seguida dou um DELETE no Cliente. Queria saber se essa é realmente a forma mais apropriada ? Eu vi umas pessoas falando do modo CASCATE, mais também vi muitas recomendações de não usa-lo pois não é uma boa deixar o sistema eliminar as entradas filhas, seria melhor isso ser feito manualmente.
Então é isso, gostaria de saber qual a melhor forma ou se a forma que eu estou atualmente utilizando também é uma boa pratica.
Obrigado a todos.
Como tudo na vida, a resposta é, depende.
O relacionamento entre cliente e endereço é um para um?
Se for, não há problemas em utilizar o cascade, afinal, você só afetaria aquele cliente e aquele endereço.
Caso contrário, tome cuidado.
De qualquer forma, ter o controle da situação e saber o que está sendo feito, ainda é a melhor opção
Entendo, mas a forma como eu estou realizando no caso (Dando um DELETE de cada vez) também seria considerada como uma boa opção ?
[quote=strikezado]Boa tarde a todos,
Minha duvida é mais para saber se o modo como estou fazendo está correto ou tem alguma forma mais eficiente de ser realizado. Eu tenho 2 tabelas no meu sistema (Cliente e Endereço) e ao remover um cliente eu primeiro dou um DELETE no endereço e em seguida dou um DELETE no Cliente. Queria saber se essa é realmente a forma mais apropriada ? Eu vi umas pessoas falando do modo CASCATE, mais também vi muitas recomendações de não usa-lo pois não é uma boa deixar o sistema eliminar as entradas filhas, seria melhor isso ser feito manualmente.
Então é isso, gostaria de saber qual a melhor forma ou se a forma que eu estou atualmente utilizando também é uma boa pratica.
Obrigado a todos.[/quote]
Existem algumas formas de fazer isso, na minha opinião a mais correta seria fazer o relacionamento das tabelas e usar o CASCADE no OnDelete e OnUpdate.
Dica:
Só acho que o endereço poderia estar diretamente na entidade Cliente, não vejo necessidade de criar uma entidade separada, pois será muito raro duas pessoas posuirem o mesmo endereço.
Você tem controle do que está sendo realizado, correto?
Sabe que serão deletados, apenas, o endereço e o cliente identificados.
Talvez a performance seja 0,10% menor, mas isso é o menor dos problemas.
Obrigado pela dica,
E espiaoweb2011, eu utilizo uma tabela a parte pois no meu sistema não existe só uma tabela que possui Endereço.
Temos também fornecedor, funcionario e etc. Levando isto em consideração seria uma redundancia muito grande sempre repetir os mesmos campos em todas essas tabelas.
Obrigado a todos
[quote=strikezado]Obrigado pela dica,
E espiaoweb2011, eu utilizo uma tabela a parte pois no meu sistema não existe só uma tabela que possui Endereço.
Temos também fornecedor, funcionario e etc. Levando isto em consideração seria uma redundancia muito grande sempre repetir os mesmos campos em todas essas tabelas.
Obrigado a todos[/quote]
Então neste caso eu tome um pouco de cuidado no uso de CASCADE para não afetar outros registros do seu banco de dados.
Se o tipo de relacionamento for 1 - 1, ta tranqüilo, vá sem medo.
Agora se for 1 - N, não recomendo.
o cascade cai perfeitamente nesse caso. pode por sem medo de ser feliz. xD