Bruno,

> Quero modelar a movimentação financeira em uma conta.
> A conta tem um saldo inicial.
> A partir daí haverão várias movimentações.
> O saldo inicial + as movimentações vão gerar um novo saldo.
> Como eu devo tratar esse saldo de forma eficiente?

Adicione outra tabela para armazenar os saldos ou pelo menos as totalizações 
por dia.
Toda avez que inserir, alterar ou excluir algum movimento, some ou subtraia 
a variação na conta correspondente na tabela de saldos.
Ao alterar alguma coisa, você sempre saberá o valor antigo e o novo valor, 
portanto você não precisará fazer um SUM de seja lá o que for para obter o 
saldo.

> 1- Guardar somente o saldo inicial e toda vez recalcular o saldo baseado 
> nas
> movimentações?

Esqueça. Isso ficará com um desempenho horrível depois de um mês de 
movimentações.

> 2- Guardar o saldo atual em um campo.

Guarde noutra tabela. Conta, data, total de débitos, total de créditos. Como 
assume-se que o cara raramente vai ficar fazendo lançamentos retroativos no 
ano passado, dá para incluir o saldo atual e anterior em cada registro 
também, ajudará muuuuuito nas consultas.

> O problema da abordagem número dois é que toda vez que alguém fizer uma 
> nova
> movimentação tenho que recalcular, talvez não seja o ideal.

Como eu disse, você pode apenas somar ou subtrair a diferença, de 
preferência via triggers. Recalcular qualquer coisa sobre qualquer volume é 
furada, especialmente com o Postgres, que adora fazer Table Scan nesses 
casos.

Atenciosamente,

Mozart Hasse 


_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a