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

Claudio Morale claudiomorale em interlegis.leg.br
Terça Setembro 25 17:25:52 BRT 2012


Olá Fabiano, o versionamento seria ideal. Entretanto, não podemos nos 
esquecer que o Sapl vem sendo desenvolvido desde de 2001... acredito que 
em algum momento isso será feito.

abs

Em 25-09-2012 14:09, Fabiano Weimar dos Santos escreveu:
> Oi Pessoal,
>
> nada contra seu código Angelo, mas eu acredito que tentar garantir a
> integridade relacional usando código na camada de aplicacao é errado.
> Integridade relacional é uma tarefa da camada de banco de dados.
>
> A resposta a sua questão é: todos concordam comigo?
>
> Eu acho essa estratégia de "flag" para registro excluido errada
> também. Se isso é importante, ou seja, o ato de excluir manter uma
> copia dos dados apagados para posterior inspeção manual, pq então não
> fazemos isso utilizando a estratégia de banco de dados versionado que
> adotei no spdo. Infelizmente o codigo que utilizei la nao serviria
> para o sapl, mas a ideia me parece fazer mais sentido.
>
> Se houver interesse em atacar essa questao, primeiro define-se a
> abordagem (se vamos fazer isso usando código no zope ou usando
> constraints no banco de dados) e depois debates os detalhes técnicos.
>
> Minha opniao tecnica pessoal já conhece ;)
>
> -- Fabiano Weimar
>
> Em 25 de setembro de 2012 12:11, Angelo Marcondes de Oliveira Neto
> <angelomarcondes em gmail.com> 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.
>> #votoemmongaba
>> Blog do UaiGeek
>> Carneirinho - MG
>> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
>> - - - - - -
>> P: Por que esta mensagem é tão curta?
>> R: http://3frases.efetividade.net
>> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
>> - - - - - -
>>
>>
>> --
>> 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