[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