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

Fabiano Weimar dos Santos xirumacanudo em gmail.com
Terça Setembro 25 19:26:49 BRT 2012


Luciano,

dá para adicionar validação de integridade relacional sem alterar a
estrutura das tabelas.

Quanto ao tipo das tabelas, um alter table resolve.

ALTER TABLE nome_da_tabela ENGINE = InnoDB;

A versao que isso passaria a valer é algo que combinamos, obviamente.

-- Fabiano Weimar

Em 25 de setembro de 2012 17:03, Luciano De Fazio
<lucianodefazio em gmail.com> escreveu:
> Concordo tb, mas lembro novamente que tabelas MyISAM nao tem suporte a
> integridade.
> Alguem vai ter de refazer as tabelas  como InnoDB e criar um script de
> conversao.
> Como nao se mexe no banco dentro da versao estavel, isso tera que ficar pra
> proxima.
> Por enquanto, validar por aplicacao eh a unica alternativa viavel.
> Luciano De Fazio
>
> Em 25/09/2012 16:34, "Gustavo Lepri" <gustavolepri em gmail.com> escreveu:
>
>> Fabiano,
>>
>> Eu também concordo com você sobre a integradidade ser toda feita no banco
>> e não na aplicação.
>>
>> +1 para essa alteração!
>>
>> Gustavo Lepri
>>
>> Em 25 de setembro de 2012 14:27, Angelo Marcondes de Oliveira Neto
>> <angelomarcondes em gmail.com> escreveu:
>>>
>>> Fabiano,
>>>
>>> Bem, vou estudar alternativa ao relacionamento no BD e ver se consigo
>>> apresentar algo também.
>>>
>>> Abraços
>>>
>>> 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
>>> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
>>> - - - - - - -
>>>
>>>
>>>
>>> Em 25 de setembro de 2012 14:09, Fabiano Weimar dos Santos
>>> <xirumacanudo em gmail.com> 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
>>>>
>>>>
>>>>
>>>> --
>>>> 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
>>>> --
>>>> 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
>>
>>
>>
>>
>> --
>> Gustavo Lepri
>>
>> --
>> 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



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