Dúvida: verificar antes de tentar excluir ou deixar lançar exceção?

4 respostas
F
Tenho uma tabela_X que possui uma chave estrangeira da tabela_Y.

Caso eu tente exlcuir uma linha da tabela_Y que esteja associada a tabela_X gerará uma exceção.

Qual é a melhor solução:

) Colocar para excluir e caso exista a associação deixar ser lançado a exceção e tratar a mesma, colocando uma mensagem para o usuário;

ou

) Primeiro verificar no banco se existe associação e somente tentar excluir caso não exista uma associação. Caso exista associação mostrar mensagem para o usuário.

Ou seja, não será gerado exceção;

Qual é a melhor solução?

Grato.

4 Respostas

renato_the_grey

Eu acho que compensa mais voce tratar a excessao e dizer para o usuario que, para ele excluir aquele elemento, ele deveria primeiro apagar a chave estrangeira da tabelaX

Nao sei, essa é só minha opiniao xD, espere outros usuarios responderem e veja o que voce acha mais adequado.

drsmachado

Melhor em que termos e cenário?
Como analista, eu sugeriria verificar o que as regras de negócio dizem (se isto for contemplado, faça o que pede a regra, caso contrário, ignore - ou seja, deixa a exceção estourar).
Como programador que não quer retrabalho, verificar antes e dizer que existe a associação é a melhor coisa.
Em linhas gerais, prefiro o primeiro, pois, se o usuário não vê a mensagem de erro posterior e imagina que deletou, #comofas???

F

Acho que não me expliquei direito.
Ambas as opções serão exibidas mensagens de erro.
Ou seja, para o usuário não tem diferença.
A diferença é em relação a forma como é tratado o fato do usuário não poder excluir uma linha que tem associação com outra tabela.
1º) Se é com tratamento de exceção
2º) Ou se com um select verificando antes se existe uma associação.

boneazul

forever_juba:

Melhor em que termos e cenário?
Como analista, eu sugeriria verificar o que as regras de negócio dizem (se isto for contemplado, faça o que pede a regra, caso contrário, ignore - ou seja, deixa a exceção estourar).
Como programador que não quer retrabalho, verificar antes e dizer que existe a associação é a melhor coisa.
Em linhas gerais, prefiro o primeiro, pois, se o usuário não vê a mensagem de erro posterior e imagina que deletou, #comofas???

Acho que não me expliquei direito.
Ambas as opções serão exibidas mensagens de erro.
Ou seja, para o usuário não tem diferença.
A diferença é em relação a forma como é tratado o fato do usuário não poder excluir uma linha que tem associação com outra tabela.
1º) Se é com tratamento de exceção
2º) Ou se com um select verificando antes se existe uma associação.

Bom se teu banco ja contem um check constraint da vida lá e ja vai reclamar da dependencia, não compensa voce fazer um select de novo pra ver isso . Ja que isso está sendo tratado a nível de banco de dados , seu nivel de aplicação não deve ser preocupar com isso . A não ser que voce queira garantir com redundancia , ai faz o select tb pra garantir. A diferença entre um e outro depende do que voce vai exibir na tela , pq tem diferenca voce exibir “Voce não pode excluir esse registro pois ele contem dependencias” e “Voce não pode excluir esse registro pois ele contem dependencias com (dados)” no segundo caso inevitavelmente voce vai precisar dessa query. Então escolha dependendo da msg de exibição.

Criado 13 de setembro de 2011
Ultima resposta 13 de set. de 2011
Respostas 4
Participantes 4