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

Fabiano Weimar dos Santos xirumacanudo em gmail.com
Terça Setembro 25 14:09:06 BRT 2012


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



-- 
Interessado em meus Cursos e Palestras? Inscreva-se em:
https://groups.google.com/d/forum/cursos-do-xiru?hl=pt-BR

Fabiano Weimar dos Santos @xiru
http://blog.xiru.org
http://www.pytown.com


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