[firebase-br] RES: DELETE CASCADE

Jonas Rodrigo Pacheco jonas.pacheco em tecnicon.com.br
Sex Nov 9 16:44:06 -03 2012


Usar TRIGGER para tudo que o banco de dados não sabe fazer direito não é o caminho, fica muito engessado.

Mas em fm, o que estou defendendo(e tentando entender) é que o DELETE CASCADE, da forma como se comporta, atende apenas necessidades mais simples, pois na prática ele é difere da teoria do processo.  Além disso me preocupo com a questão da ordem de disparo e a visibilidade do registro mestre, que fica visivel para as outras transações,  antes de apaga-lo (commit do delete).

Deletar o registro da tabela PAI e depois os registros da tabela FILHO, é o mesmo que  simplesmente ignorar a integridade referencial da tabela, pois se ela valesse, ele não conseguiria deletar primeiro o registro principal.

Infelizmene esse processo erroneo não vai mudar e os desenvolvedores e DBAs  terão que conviver com esse 'desafio'

Jonas Rodrigo Pacheco
Administrador de Banco de Dados


-----Mensagem original-----
De: lista [mailto:lista-bounces em firebase.com.br] Em nome de Gladiston Santana
Enviada em: sexta-feira, 9 de novembro de 2012 15:52
Para: FireBase
Assunto: Re: [firebase-br] DELETE CASCADE

Caro colega, o problema de trabalhar de triggers é que elas são mais chatas do que você. :)

Abandonei o uso delas lá no Sybase 6.0 que deveria ser por volta do ano 97/98.
Não quero dizer que não use triggers, eu apenas não as uso como design de banco por causa do efeito macarrônico a medida que a base aumenta sua estrutura, é a versão 'DLL Hell' dos DBAs.

Em 9 de novembro de 2012 14:52, Jonas Rodrigo Pacheco < jonas.pacheco em tecnicon.com.br> escreveu:

> Considere-se perdoado colega! Eu sou exigente, ou seja, MUITO CHATO!
>
>
Perfeito,

Então a solução é usar Trigger, consequentemente os itens (o filho) será deletado primeiro.

Trocar o simples comando ON DELETE CASCADE no final de uma FK por diversas linhas de código. 

Thanks! This very productive.

Jonas Rodrigo Pacheco
Administrador de Banco de Dados


-----Mensagem original-----
De: lista [mailto:lista-bounces em firebase.com.br] Em nome de Alysson Gonçalves de Azevedo Enviada em: sexta-feira, 9 de novembro de 2012 11:44
Para: Carlos H. Cantu; FireBase
Assunto: Re: [firebase-br] RES: DELETE CASCADE

Naquele link do Cantu, 3º resposta, se eu não me engano, Vlad Khorsun<http://tracker.firebirdsql.org/secure/ViewProfile.jspa?name=hvlad>é
um dos desenvolvedores principais (não tenho certeza, mas chutaria que ele deve ser um dos criadores iniciais).

Ele disse: "It's as designed and not a bug", que eu acredito que dispensa até uma tradução da minha parte.




Alysson Gonçalves de Azevedo - (11) 984 917 730

"É curioso como as pessoas ficam confusas quando a frase não terminam do jeito que elas periquito."



Em 9 de novembro de 2012 11:21, Carlos H. Cantu
<listas em warmboot.com.br>escreveu:

> JRP> Criar mais uma trigger porque o delete cascade não funciona 
> JRP> conforme
> o esperado?
>
> "Conforme esperado" é questão de ponto de vista, como vc deve ter lido 
> nos comentários do link que eu postei ;)
>
> JRP> Discordo do que está escrito no
> JRP> http://tracker.firebirdsql.org/browse/CORE-1541, na minha opinião 
> JRP> é um bug sim, pois se há um processo de controle transacional 
> JRP> descente ele deve fazer um lock/bloqueio no registro que vai ser 
> JRP> deletado (não permitindo que novos filhos sejam inseridos por 
> JRP> outra transação usando o registro pai que vai ser deletado), 
> JRP> deleta os 'filhos' e então, para finalizar deleta o registro pai.
>
> Se você acha que é um bug, o Firebird tem código aberto, e vc é mais 
> do que bem vindo para corrigi-lo e enviar as atualizações para o 
> projeto. Não espere que eles façam isso, pois como vc deve ter lido, 
> os atuais core developers não consideram isso um bug.
>
> []s
> Carlos H. Cantu
> www.FireBase.com.br - www.firebirdnews.org www.warmboot.com.br - 
> blog.firebase.com.br
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br 
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
______________________________________________





Mais detalhes sobre a lista de discussão lista