[sapl-dev] Integridade referencial do Banco de Dados do SAPL

Claudio Morale claudiomorale em interlegis.leg.br
Quarta Setembro 26 14:33:47 BRT 2012


Fabiano, vou colocar o cenário 5: ao excluir um pralamenar ou mesmo o 
seu mandato o que ocorre com as votações nas quais tem a participação 
dele? Os problemas são vários: 1-pode ser que com a exclusão dele haja 
falta de quórum e aí? as votações são anuladas? se ainda assim houver 
quórum pode ser que o resultado da votação se altere: algo que tenha 
sido aprovado pode ter o seu resultado invertido... então acredito ainda 
na tese de se melhorar a qualidade do código incluindo procedimentos 
(Procedures) no banco de modo a poder analisar certas situações.

att.

Em 26-09-2012 13:26, Fabiano Weimar dos Santos escreveu:
> Cenário 3: com RESTRICT no banco, o dado nunca seria excluído acidentalmente :)
>
> Cenário 4: mesmo com RESTRICT no banco, o usuário sabe realmente o que
> esta fazendo e quer apagar o parlamentar sem apagar os projetos dele.
> Pode-se utilizar a estrategia atual ou então fazer o que o sqlalchemy
> faz por padrão: considerar todas as associações como null. Nesse caso,
> temos o cenario de hoje, so que com a vantagem de usar chaves
> estrangeiras (mas o problema do angelo segue ocorrendo).
>
> Eu acho que seria importante, independentemente da escolha adotada,
> considerar se o que o usuário esta fazendo esta ou não correto. A
> filosofia do unix é que o usuário sabe o que faz e o sistema obedece
> (se você mandar apagar o /bin e /var com -rf o sistema faz e não
> discute, o que causa uma pane eminente). A filosofia do sapl é assumir
> que nenhum usuário sabe o que faz? Se for, RESTRICT evita que os
> problemas ocorram. Se o SAPL assume que todo mundo é adulto e sabe o
> que faz, CASCADE. Pessoalmente acho que tudo é cinza e que operações
> como essa do Sergio deveriam ser restritas, ter mensagens de alerta,
> etc e... usar CASCADE.
>
> Agora, nao levem em consideração apenas o que eu digo. Quem usa o
> sistema no dia a dia é quem deve decidir isso.
>
> So fiz questão de escrever pq ha gente que não sabe que RESTRICT pode
> ser usado e mesmo assim os relacionamentos serem quebrados usando
> NULL, sem apagar registros. A diferença é que quando o id do
> relacionamento não é NULL, ele deve ter a chave estrangeira
> respeitada.
>
> -- Fabiano Weimar
>
>
> Em 26 de setembro de 2012 13:08, sergiodamiati
> <sergiodamiati em camaracampinas.sp.gov.br> escreveu:
>> Muita calma nessa hora. Para um administrador do Sapl o que é pior?
>>
>> Cenário 1: é o atual - o usuário exclui (acidentalmente) um parlamentar com
>> 4 mandatos e as matérias de sua autoria permanecem no BD. O administrador
>> restaura o parlamentar e tudo ok.
>> UPDATE parlamentar SET 0 WHERE cod_parlamentar = X
>>
>> Cenário 2: em discussão (cascade) - o usuário exclui (acidentalmente) um
>> parlamentar com 4 mandatos e todas as matérias de sua autoria são excluídas
>> do BD.
>>
>> Tomara que o administrador tenha um backup atualizado. Mesmo assim, haveria
>> perda de dados, imagine isso descoberto uma semana depois. O administrador
>> restaura o backup de uma semana atrás e perde uma semana de trabalho, aqui
>> em Cps seria um desastre.
>>
>> []s
>>
>> Sérgio Damiati
>>
>> Em 25-09-2012 20:11, Angelo Marcondes de Oliveira Neto escreveu:
>>
>> Morale,
>>
>> Realmente vendo pela ótica do administrador do banco de dados, não existe
>> integridade referencial e muito menos exclusão efetiva dos dados.
>> Mas se você olhar pela ótica gerente do SAPL, o qual não possui
>> conhecimentos de banco de dados e o qual poderá excluir parlamentares e
>> deixar uma série de referências inválidas, ou poderá excluir uma comissão e
>> deixar outra centena de referências inválidas, aí neste caso existe uma
>> integridade referencial.
>> Mas, como uma administrador de BD, vc me dirá que eu não me preocupe, já que
>> nada foi excluído. Até aí tudo bem, mas acontecerá que o usuário irá
>> cadastrar novamente o parlamentar excluído anteriormente, na tentativa de
>> gerar referências a suas proposições orfãs, o que ocasionará outro problema.
>> Já que teremos várias proposições para o parlamentar antigo e para o novo,
>> que na verdade são os mesmos!
>> Assim, minha preocupação é neste sentido da integridade, que é relativa já
>> que existe apenas sobre a ótica do usuário.
>>
>> Penso, que devemos discutir melhor esta problema, já que pude ver vários
>> SAPL, os quais tem informações orfãs, já que o sistema permite exclusão de
>> um parlamentar ou de uma comissão, mesmo ele sendo ligado a várias
>> referências.
>>
>> Não sou contra a exclusão, sou apenas favorável de que encaminhemos o
>> usuário a trocar os autores de proposições dentre outras referências, antes
>> de excluí-los.
>>
>> Abraços, por favor, vamos discutir e quem sabe gerar uma evolução ao nosso
>> produto.
>>
>> UaiGeek - Angelo Marcondes de Oliveira Neto.
>> Blog do UaiGeek
>> Carneirinho - MG
>> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
>> - - - - - -
>> P: Por que esta mensagem é tão curta?
>> R: http://3frases.efetividade.net
>> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
>> - - - - - -
>>
>>
>>
>> Em 25 de setembro de 2012 18:31, Claudio Morale
>> <claudiomorale em interlegis.leg.br> escreveu:
>>>
>>> Angelo, as tuplas não são excluídas efetivamente, razão pela qual não
>>> afeta a integridade referencial. É feito apenas um update naquelas que
>>> deveriam ser excluidas alterando a coluna ind_excluido para 1.
>>> Fisicamente não acontece nada...pois não há execução da instrução DELETE
>>> .. o que aí sim refletiria a questão da integridade referencial, pois o
>>> mysql ao eliminar o que eventualmente não deve - por falta de definição
>>> de regras que vincule as tuplas fisicamente - faria com que tivéssemos
>>> problemas de integridade. Nesse momento, considerando o que temos, a
>>> preocupação maior é com a inclusão dos dados válidos para evitar
>>> problemas de integridade. E isso hj está sendo feito via rotinas no
>>> aplicativo. Uma melhoria seria levar essas validações para as tabelas na
>>> forma de procedures no banco. É um modo de separar os códigos e dar mais
>>> leveza à parte que trata da interface.
>>>
>>> att.
>>>
>>> Em 25-09-2012 17:40, Angelo Marcondes de Oliveira Neto escreveu:
>>>> Morale,
>>>>
>>>> Não entendi seu argumento, por favor exemplifique.
>>>>
>>>> Abraços
>>>>
>>>> UaiGeek - Angelo Marcondes de Oliveira Neto. <angelomarcondes em gmail.com>
>>>> Blog do UaiGeek  <http://uaigeek.blogspot.com>
>>>> Carneirinho - MG <http://pt.wikipedia.org/wiki/Carneirinho>
>>>> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
>>>> - -
>>>> - - - - - -
>>>> P: Por que esta mensagem é tão curta?
>>>> R: http://3frases.efetividade.net
>>>> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
>>>> - -
>>>> - - - - - -
>>>>
>>>>
>>>>
>>>> Em 25 de setembro de 2012 17:28, Claudio Morale <
>>>> claudiomorale em interlegis.leg.br> escreveu:
>>>>
>>>>> Angelo, a exclusão no sapl é lógica e não impacta a questão da
>>>>> integridade referencial que qdo for o caso deve ser verificada na
>>>>> inclusão.
>>>>>
>>>>> Em 25-09-2012 12:11, Angelo Marcondes de Oliveira Neto escreveu:
>>>>>> Amigos,
>>>>>>
>>>>>> Estou preocupado com a integridade referencial dos banco de dados do
>>>>> SAPL e
>>>>>> por isso estou lhes escrevendo, com objetivo de discutirmos qual a
>>>>>> melhor
>>>>>> maneira de evitar que existam quebras de referências, seguindo a linha
>>>>>> de
>>>>>> uma discussão iniciada pelo Xiru e pelo Damiatti, anteriormente.
>>>>>> Abaixo, segue uma proposta de código para verificar a integridade,
>>>>>> antes
>>>>> da
>>>>>> exclusão do parlamentar, ou seja do formulário *
>>>>>> parlamentar_excluir_proc.dtml*.
>>>>>> Gostaria da analise de todos, e saber se esta é a melhor opção no
>>>>> momento e
>>>>>> se posso trabalhar neste sentido.
>>>>>>
>>>>>>
>>>>>> <dtml-comment>
>>>>>> *****************************************************************
>>>>>> *   Função: Esse método apenas chama o Método SQL de exclusão do*
>>>>>> *       parlamentar, isto é, o método que atribui a verdadeiro o*
>>>>>> *       campo ind_excluido do parlamentar cujo o cod_parlamentar*
>>>>>> *       é recebido.                                             *
>>>>>> *   Argumentos: cod_parlamentar : int - o código do parlamentar *
>>>>>> *       a ser escluído.                                         *
>>>>>> *   Retorno: Atribuição do flag ind_excluido do parlamentar e   *
>>>>>> *       redirecionamento para a página de parlamentares.        *
>>>>>> *   Michael S. Onishi / Daniel C. Azevedo em 01-03-2001.        *
>>>>>> *****************************************************************
>>>>>> * UPDATE                                                        *
>>>>>> *    Ao se excluir um parlamentar, alteramos o índice da tabela *
>>>>>> *  com o autor correspondente (ind_excluido=1) representado a   *
>>>>>> *  exclusão desse relacionamento, além da exclusão, se houver,  *
>>>>>> *  do username cadastrado no acl_user como login.               *
>>>>>> *  Rogério Ueda em 18-12-2003                                   *
>>>>>> *****************************************************************
>>>>>> </dtml-comment>
>>>>>>
>>>>>> <dtml-if
>>>>>>
>>>>>
>>>>> expr="zsql.composicao_comissao_obter_zsql(cod_parlamentar=cod_parlamentar)">
>>>>>>      <dtml-let mensagem="'Parlamentar está cadastro como membro de
>>>>>> comissão(ões) e não pode ser excluído!'">
>>>>>>         <dtml-var mensagem_emitir>
>>>>>>      </dtml-let>
>>>>>> <dtml-elif
>>>>>>
>>>>>> expr="zsql.composicao_mesa_obter_zsql(cod_parlamentar=cod_parlamentar)">
>>>>>>      <dtml-let mensagem="'Parlmentar está cadastrado como membro de
>>>>>> mesa
>>>>>> diretora e não pode ser excluído'">i
>>>>>>         <dtml-var mensagem_emitir>
>>>>>> </dtml-let>
>>>>>> <dtml-elif
>>>>>>
>>>>>
>>>>> expr="zsql.composicao_mesa_sessao_obter_zsql(cod_parlamentar=cod_parlamentar)">
>>>>>>      <dtml-let mensagem="'Parlmentar está cadastrado como membro de
>>>>>> mesa
>>>>>> diretora de sessão plenária e não pode ser excluído'">i
>>>>>>         <dtml-var mensagem_emitir>
>>>>>>            </dtml-let>
>>>>>>
>>>>>>
>>>>>> <dtml-else>
>>>>>> <dtml-try>
>>>>>>       <dtml-call
>>>>>> expr="zsql.parlamentar_excluir_zsql(cod_parlamentar=cod_parlamentar)">
>>>>>> <dtml-except>
>>>>>>      <dtml-let mensagem="'Houve um erro! Parlamentar não excluído!'">
>>>>>>         <dtml-var mensagem_emitir>
>>>>>>      </dtml-let>
>>>>>>      <dtml-call expr="REQUEST.set('erro', 1)">
>>>>>> </dtml-try>
>>>>>>
>>>>>> <dtml-unless erro>
>>>>>>      <dtml-try>
>>>>>>         <dtml-in
>>>>> expr="zsql.autor_obter_zsql(cod_parlamentar=cod_parlamentar)">
>>>>>>            <dtml-call expr="zsql.autor_excluir_zsql(cod_autor)">
>>>>>>            <dtml-call
>>>>> expr="pysc.username_excluir_pysc(username=col_username)">
>>>>>>         </dtml-in>
>>>>>>      <dtml-except>
>>>>>>         <dtml-let mensagem="'Parlamentar Excluído com Sucesso!<BR>Houve
>>>>>> um
>>>>>> erro! Autor Não Excluído!'">
>>>>>>            <dtml-var mensagem_emitir>
>>>>>>         </dtml-let>
>>>>>>      <dtml-else>
>>>>>>         <dtml-let mensagem="'Parlamentar Excluído com Sucesso!'"
>>>>> sucesso="1">
>>>>>>            <dtml-var mensagem_emitir>
>>>>>>         </dtml-let>
>>>>>>      </dtml-try>
>>>>>>
>>>>>> </dtml-unless>
>>>>>>
>>>>>> </dtml-if>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> UaiGeek - Angelo Marcondes de Oliveira Neto.
>>>>>> <angelomarcondes em gmail.com>
>>>>>> #votoemmongaba
>>>>>> Blog do UaiGeek  <http://uaigeek.blogspot.com>
>>>>>> Carneirinho - MG <http://pt.wikipedia.org/wiki/Carneirinho>
>>>>>> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
>>>>>> -
>>>>> - -
>>>>>> - - - - - -
>>>>>> P: Por que esta mensagem é tão curta?
>>>>>> R: http://3frases.efetividade.net
>>>>>> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
>>>>>> -
>>>>> - -
>>>>>> - - - - - -
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Claudio Morale
>>>>> Analista de Sistemas
>>>>> Interlegis - Brasília (DF)
>>>>> --
>>>>> Wiki do SAPL:
>>>>> http://colab.interlegis.gov.br/wiki/ProjetoSapl
>>>>>
>>>>> Regras de participação:
>>>>> http://colab.interlegis.gov.br/wiki/ComoParticiparComunidade
>>>>>
>>>>> Para administrar sua conta visite:
>>>>> http://listas.interlegis.gov.br/mailman/listinfo/sapl-dev
>>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>> Claudio Morale
>>> Analista de Sistemas
>>> Interlegis - Brasília (DF)
>>> --
>>> Wiki do SAPL:
>>> http://colab.interlegis.gov.br/wiki/ProjetoSapl
>>>
>>> Regras de participação:
>>> http://colab.interlegis.gov.br/wiki/ComoParticiparComunidade
>>>
>>> Para administrar sua conta visite:
>>> http://listas.interlegis.gov.br/mailman/listinfo/sapl-dev
>>
>>
>>
>>
>>
>>
>> --
>> Wiki do SAPL:
>> http://colab.interlegis.gov.br/wiki/ProjetoSapl
>>
>> Regras de participação:
>> http://colab.interlegis.gov.br/wiki/ComoParticiparComunidade
>>
>> Para administrar sua conta visite:
>> http://listas.interlegis.gov.br/mailman/listinfo/sapl-dev
>
>
>


-- 
Claudio Morale
Analista de Sistemas
Interlegis - Brasília (DF)


Mais detalhes sobre a lista de discussão SAPL-dev