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

Claudio Morale claudiomorale em interlegis.leg.br
Terça Setembro 25 21:09:27 BRT 2012


Angelo, entendo o que diz e acho que a melhoria no processo de validação 
dos dados ajudará em muito a minimizar essas questões.
Entretanto, é difícil impedir o usuário de cometer erros, como nos casos 
citados e outros mais. Impedir a exclusão de um mandato incluído 
indevidamente e que em razão dele foram feitas inclusões de matérias, 
votações? Nesses casos, deveríamos aplicar a regra cascade para manter a 
integridade, já pensou no impacto? ou restrict impedindo-o ? Pode-se 
evitar exclusões/modificações quando alguma informação tida como básica 
já tiver sido utilizada, como nos casos das tabelas auxiliares, para 
citar um exemplo. Em outros casos é possível sim melhorar confrontando 
situações/estados.

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. <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 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
>>
>
>
>


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


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