[pgbr-geral] Dúvida de modelagem de contas de ban cos

2009-10-10 Por tôpico Bruno Carneiro

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?

1- Guardar somente o saldo inicial e toda vez recalcular o saldo baseado nas
movimentações?
2- Guardar o saldo atual em um campo.

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.

O que me sugerem?
-- 
View this message in context: 
http://www.nabble.com/D%C3%BAvida-de-modelagem-de-contas-de-bancos-tp25834706p25834706.html
Sent from the PostgreSQL - Brasil mailing list archive at Nabble.com.

___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Dúvida de modelagem de contas de ba ncos

2009-10-10 Por tôpico Tarcísio Sassara
Você não pode recalcular um campo com o saldo porque você perderá o
histórico das movimentações.

Você deve criar uma tabela que armazena as movimentações e inserir
todas estas, seja positivas ou negativas.
Fica algo como:
cliente  valor  data
1 100.00   2009-09-09
1 -50.00    2009-09-09

Quando você fizer quiser pegar o saldo, você faz um soma(SUM) na coluna valor.

select cliente, sum(valor)
from movimentacoes
where cliente = 1
group by 1

Então é só adaptar esta idéia ao seu modelo.


2009/10/10 Bruno Carneiro guimaraescarne...@gmail.com

 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?

 1- Guardar somente o saldo inicial e toda vez recalcular o saldo baseado nas
 movimentações?
 2- Guardar o saldo atual em um campo.

 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.

 O que me sugerem?
 --
 View this message in context: 
 http://www.nabble.com/D%C3%BAvida-de-modelagem-de-contas-de-bancos-tp25834706p25834706.html
 Sent from the PostgreSQL - Brasil mailing list archive at Nabble.com.

 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral



--
Tarcisio F. Sassara
Nzb ryn. Ibpê fnor dhrz? Fvz é ryn! Gnzvelf.
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Dúvida de modelagem de contas de banc os

2009-10-10 Por tôpico Bruno Carneiro

Então, mas sempre que eu quiser saber o saldo vou ter que fazer esse calculo
desde a data de criação da conta??

E no futuro, não vai ficar pesado depois de muito tempo com muitas
movimentações?


Tarcísio Sassara wrote:
 
 Você não pode recalcular um campo com o saldo porque você perderá o
 histórico das movimentações.
 
 Você deve criar uma tabela que armazena as movimentações e inserir
 todas estas, seja positivas ou negativas.
 Fica algo como:
 cliente  valor  data
 1 100.00   2009-09-09
 1 -50.00    2009-09-09
 
 Quando você fizer quiser pegar o saldo, você faz um soma(SUM) na coluna
 valor.
 
 select cliente, sum(valor)
 from movimentacoes
 where cliente = 1
 group by 1
 
 Então é só adaptar esta idéia ao seu modelo.
 
 
 

-- 
View this message in context: 
http://www.nabble.com/D%C3%BAvida-de-modelagem-de-contas-de-bancos-tp25834706p25834956.html
Sent from the PostgreSQL - Brasil mailing list archive at Nabble.com.

___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Dúvida de modelagem de contas de ba ncos

2009-10-10 Por tôpico Andre Fernandes
Bom dia,

Uma abordagem possível é guardar o saldo em uma tabela (por exemplo, uma
tabela contendo o saldo diário, no início do dia referente) e então somar
(ou subtrair) apenas as movimentações do dia referido. Muitos bancos
utilizam essa abordagem, pois não se perde histórico nem usa todo o
histórico para cálculos de saldo.

Exemplo:
create table saldo_diario
(numero_conta bigint,
dia_referencia date,
valor numeric(18,3)
);

create table movimentacao
(numero_conta bigint,
tipo_movimentacao bigint,  -- supondo ser chave estrangeira, isto é um
exemplo apenas
valor numeric(18,3)
);

cria-se então uma função que calcula o saldo referente ao dia anterior e
grava o valor em saldo_diario. Essa função seria rodada à 00h10 de todo dia,
por exemplo.



Espero que esteja compreensível a idéia que passei, qualquer dúvida (se algo
ficou confuso) é só perguntar.

Atenciosamente,
André.

2009/10/10 Bruno Carneiro guimaraescarne...@gmail.com


 Então, mas sempre que eu quiser saber o saldo vou ter que fazer esse
 calculo
 desde a data de criação da conta??

 E no futuro, não vai ficar pesado depois de muito tempo com muitas
 movimentações?


 Tarcísio Sassara wrote:
 
  Você não pode recalcular um campo com o saldo porque você perderá o
  histórico das movimentações.
 
  Você deve criar uma tabela que armazena as movimentações e inserir
  todas estas, seja positivas ou negativas.
  Fica algo como:
  cliente  valor  data
  1 100.00   2009-09-09
  1 -50.002009-09-09
 
  Quando você fizer quiser pegar o saldo, você faz um soma(SUM) na coluna
  valor.
 
  select cliente, sum(valor)
  from movimentacoes
  where cliente = 1
  group by 1
 
  Então é só adaptar esta idéia ao seu modelo.
 
 
 

 --
 View this message in context:
 http://www.nabble.com/D%C3%BAvida-de-modelagem-de-contas-de-bancos-tp25834706p25834956.html
 Sent from the PostgreSQL - Brasil mailing list archive at Nabble.com.

 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral




-- 
André de Camargo Fernandes
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Dúvida de modelagem de contas de banc os

2009-10-10 Por tôpico Bruno Carneiro

Então, minha única dúvida ai seria se no futuro, o usuário modificasse
movimentações do passado, neste caso teria que re-calcular o saldo daquele
dia.

E se o saldo desse dia muda, todos os saldos dos dias posteriores teriam que
mudar também...

Opções

1- Quando modificar o saldo de um dia, re-calcular os dias posteriores

ou

2- Na tabela de saldo_diário, armazenar somente o saldo DAQUELE DIA, quando
quiser saber o saldo, fazer um sum de todos os dias até aquele.

Creio que a primeira idéia seja melhor, já que não será muito comum
modificar saldos de dias anteriores... afinal uma vez passada a data, não
tem como mais fazer movimentação nela ( teoricamente ), a não ser que tenha
havido algum engano que precise ser corrigido.


Andre Fernandes-2 wrote:
 
 Bom dia,
 
 Uma abordagem possível é guardar o saldo em uma tabela (por exemplo, uma
 tabela contendo o saldo diário, no início do dia referente) e então somar
 (ou subtrair) apenas as movimentações do dia referido. Muitos bancos
 utilizam essa abordagem, pois não se perde histórico nem usa todo o
 histórico para cálculos de saldo.
 
 Exemplo:
 create table saldo_diario
 (numero_conta bigint,
 dia_referencia date,
 valor numeric(18,3)
 );
 
 create table movimentacao
 (numero_conta bigint,
 tipo_movimentacao bigint,  -- supondo ser chave estrangeira, isto é um
 exemplo apenas
 valor numeric(18,3)
 );
 
 cria-se então uma função que calcula o saldo referente ao dia anterior e
 grava o valor em saldo_diario. Essa função seria rodada à 00h10 de todo
 dia,
 por exemplo.
 
 
 
 Espero que esteja compreensível a idéia que passei, qualquer dúvida (se
 algo
 ficou confuso) é só perguntar.
 
 Atenciosamente,
 André.
 
 2009/10/10 Bruno Carneiro guimaraescarne...@gmail.com
 
 
 
 

-- 
View this message in context: 
http://www.nabble.com/D%C3%BAvida-de-modelagem-de-contas-de-bancos-tp25834706p25835162.html
Sent from the PostgreSQL - Brasil mailing list archive at Nabble.com.

___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Dúvida de modelagem de contas de ba ncos

2009-10-10 Por tôpico Tarcísio Sassara
2009/10/10 Bruno Carneiro guimaraescarne...@gmail.com:

 Então, minha única dúvida ai seria se no futuro, o usuário modificasse
 movimentações do passado, neste caso teria que re-calcular o saldo daquele
 dia.

Não entendi o problema de um usuário alterar uma movimentação. Ele
pode fazer isso?

Continuando...

Não acredito que vai ser muito ruim como eu disse pois você não vai
precisar fazer o SUM com todos os
registros de movimentações. Apenas de um cliente de cada vez e:
Um cliente não terá tantas movimentações.

Mas pensando em performance,
Indo pelo seu primeiro e-mail, a alternativa de ter uma coluna com o
saldo atual e depois ir somando e subtraindo com cada movimentação
funciona.
De qualquer forma você precisa de uma tabela movimentações para ter o histórico.
Então, basta ter uma trigger que para cada alteracão na tabela
movimentações, atualize o saldo atual.

Abraço

2009/10/10 Bruno Carneiro guimaraescarne...@gmail.com:

 Então, minha única dúvida ai seria se no futuro, o usuário modificasse
 movimentações do passado, neste caso teria que re-calcular o saldo daquele
 dia.

 E se o saldo desse dia muda, todos os saldos dos dias posteriores teriam que
 mudar também...

 Opções

 1- Quando modificar o saldo de um dia, re-calcular os dias posteriores

 ou

 2- Na tabela de saldo_diário, armazenar somente o saldo DAQUELE DIA, quando
 quiser saber o saldo, fazer um sum de todos os dias até aquele.

 Creio que a primeira idéia seja melhor, já que não será muito comum
 modificar saldos de dias anteriores... afinal uma vez passada a data, não
 tem como mais fazer movimentação nela ( teoricamente ), a não ser que tenha
 havido algum engano que precise ser corrigido.


 Andre Fernandes-2 wrote:

 Bom dia,

 Uma abordagem possível é guardar o saldo em uma tabela (por exemplo, uma
 tabela contendo o saldo diário, no início do dia referente) e então somar
 (ou subtrair) apenas as movimentações do dia referido. Muitos bancos
 utilizam essa abordagem, pois não se perde histórico nem usa todo o
 histórico para cálculos de saldo.

 Exemplo:
 create table saldo_diario
 (numero_conta bigint,
 dia_referencia date,
 valor numeric(18,3)
 );

 create table movimentacao
 (numero_conta bigint,
 tipo_movimentacao bigint,  -- supondo ser chave estrangeira, isto é um
 exemplo apenas
 valor numeric(18,3)
 );

 cria-se então uma função que calcula o saldo referente ao dia anterior e
 grava o valor em saldo_diario. Essa função seria rodada à 00h10 de todo
 dia,
 por exemplo.



 Espero que esteja compreensível a idéia que passei, qualquer dúvida (se
 algo
 ficou confuso) é só perguntar.

 Atenciosamente,
 André.

 2009/10/10 Bruno Carneiro guimaraescarne...@gmail.com





 --
 View this message in context: 
 http://www.nabble.com/D%C3%BAvida-de-modelagem-de-contas-de-bancos-tp25834706p25835162.html
 Sent from the PostgreSQL - Brasil mailing list archive at Nabble.com.

 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral




-- 
Tarcisio F. Sassara
Nzb ryn. Ibpê fnor dhrz? Fvz é ryn! Gnzvelf.
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Dúvida de modelagem de contas de ba ncos

2009-10-10 Por tôpico Andre Fernandes
Nesse caso o melhor, penso eu, seria realmente re-calcular os saldos de
todos os dias posteriores a essa movimentação.

Atenciosamente,

2009/10/10 Bruno Carneiro guimaraescarne...@gmail.com


 Então, minha única dúvida ai seria se no futuro, o usuário modificasse
 movimentações do passado, neste caso teria que re-calcular o saldo daquele
 dia.

 E se o saldo desse dia muda, todos os saldos dos dias posteriores teriam
 que
 mudar também...

 Opções

 1- Quando modificar o saldo de um dia, re-calcular os dias posteriores

 ou

 2- Na tabela de saldo_diário, armazenar somente o saldo DAQUELE DIA, quando
 quiser saber o saldo, fazer um sum de todos os dias até aquele.

 Creio que a primeira idéia seja melhor, já que não será muito comum
 modificar saldos de dias anteriores... afinal uma vez passada a data, não
 tem como mais fazer movimentação nela ( teoricamente ), a não ser que tenha
 havido algum engano que precise ser corrigido.


 Andre Fernandes-2 wrote:
 
  Bom dia,
 
  Uma abordagem possível é guardar o saldo em uma tabela (por exemplo, uma
  tabela contendo o saldo diário, no início do dia referente) e então somar
  (ou subtrair) apenas as movimentações do dia referido. Muitos bancos
  utilizam essa abordagem, pois não se perde histórico nem usa todo o
  histórico para cálculos de saldo.
 
  Exemplo:
  create table saldo_diario
  (numero_conta bigint,
  dia_referencia date,
  valor numeric(18,3)
  );
 
  create table movimentacao
  (numero_conta bigint,
  tipo_movimentacao bigint,  -- supondo ser chave estrangeira, isto é um
  exemplo apenas
  valor numeric(18,3)
  );
 
  cria-se então uma função que calcula o saldo referente ao dia anterior e
  grava o valor em saldo_diario. Essa função seria rodada à 00h10 de todo
  dia,
  por exemplo.
 
 
 
  Espero que esteja compreensível a idéia que passei, qualquer dúvida (se
  algo
  ficou confuso) é só perguntar.
 
  Atenciosamente,
  André.
 
  2009/10/10 Bruno Carneiro guimaraescarne...@gmail.com
 
 
 
 

 --
 View this message in context:
 http://www.nabble.com/D%C3%BAvida-de-modelagem-de-contas-de-bancos-tp25834706p25835162.html
 Sent from the PostgreSQL - Brasil mailing list archive at Nabble.com.

 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral




-- 
André de Camargo Fernandes
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Dúvida de modelagem de contas de ba ncos

2009-10-10 Por tôpico Mozart Hasse
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á muito 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
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral