[pgbr-geral] Dúvida de modelagem de contas de ban cos
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
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
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
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
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 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
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
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