[firebase-br] Indice

Adriano Luiz de Souza adriano em riodeserto.com.br
Ter Mar 10 22:51:21 -03 2009


    Na verdade não considero besteira seu comentário, aliás bastante 
oportuno. Sei que sou estranho tantas foreign keys... Mas esta única 
tabela que armazena todos os lançamentos contábeis de todos os módulos 
de um sistema ERP se faz necessário. Antes eu tinha várias tabelas para 
armazenar os lançamentos contábeis de cada módulo, conceitualmente 
obedencendo as formas normais. No entanto, para fazer relatórios 
gerenciais utilizando mais de 10 tabelas diferentes se demonstrou mais 
lento e trabalhoso do que ter tudo em uma única tabela. Sem contar as 
buscas que devo fazer nas tabelas para achar lançamentos, totalizações 
por conta contábil, onde eram necessários vários unions para o 
resultado, gerando assim um processamento enorme.
    Cada caso é um caso, para mim, essa foi a melhor solução.
    Só para constar, não misturo os lançamentos bancários com 
lançamentos contábeis, e sim os lançamentos contábeis relacionados com o 
lançamento bancário. Para armazenar os lançamentos bancários existe uma 
outra tabela. Se excluir ou alterar o lançamento bancário, os 
lançamentos contábeis são atualizados. Para isso que existem relatórios 
conciliadores, razões e outros relatórios auxiliares.

Adriano



Eduardo Jedliczka escreveu:
> Adriano,  não conheço as regras do seu sistema/negócio, por isto posso
> estar falando uma IMENSA besteira...
>
> Me soa muito estranho uma tabela ter 19 FKs, exceto se for um ambiente
> para mineração de dados ou um Data Warehouse.
>
> acho que você poderia desmembrar esta tabela (seguir corretamente as
> Formas Normais) em várias tabelas menores com relacionamento "1 para n"
> ou "1 para 1", assim, evita-se índices pobres e um monte de espaço
> desperdiçado com valores NULL.
>
> Como disse, não conheço as regras do negócio, mas não acho "natural"
> controlar os lançamentos contábeis na mesma tabela que o movimento
> bancário, pois este último é passível de estorno e divergências de data
> entre lançamento e compensação.
>
> Sem mais,
>
> Eduardo Jedliczka
>
> Em Ter, 2009-03-10 às 16:15 -0300, Adriano Luiz de Souza escreveu:
>
>   
>> Obrigado pelos esclarecimentos. Sim, tem campos que estao nulos... Essa 
>> é uma tabela que armazena lançamentos contabeis, e até o momento, 
>> movimento bancário ainda não tem nenhum lançamento contábil armazenado, 
>> logo... toda a coluna cd_movimento_bancario, está nulo. Então o firebird 
>> está agindo corretamente... Assim que esta tabela começar a ser populada 
>> acredito que o plan será escolhido corretamente.
>>
>> Adriano
>>
>> Douglas Tosi escreveu:
>>     
>>> 2009/3/10 Adriano Luiz de Souza <adriano em riodeserto.com.br>:
>>>   
>>>       
>>>> Mas acho que eu sei qual é o problema... A tabela tem 400.000 registros mas
>>>> para este campo no qual estou pesquisando, não há nenhum registro... Pode
>>>> ser que isso esteja causando o uso desse plan. Vou testar isso  e depois
>>>> posto o resultado.
>>>>     
>>>>         
>>> Não entendi.
>>> O campo está com todos os valores null?
>>> Ou a pesquisa "c.cd_movimento_bancario = 400000" não vai encontrar
>>> nenhum registro.
>>>
>>> Se for o primeiro caso, o índice tem péssima seletividade e o plano do
>>> firebird está certo.
>>> Se for o segundo caso, provavelmente não vai fazer diferença: o
>>> otimizador atual do firebird não usa o valor pesquisado para
>>> determinar o plano. Pesquisar "400000" ou "17" não faz diferença para
>>> o otimizador.
>>>
>>> hth,
>>>   
>>>       
>> ______________________________________________
>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>> Para saber como gerenciar/excluir seu cadastro na lista, use: http://www.firebase.com.br/fb/artigo.php?id=1107
>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>     
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use: http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>   





Mais detalhes sobre a lista de discussão lista