0

我正在创建一些财务软件。在这样的软件中,不仅要知道字段的当前值,还要知道字段的值是什么,谁做了更改以及何时进行更改,因此可以回顾历史,例如查看谁犯了一个错误。犯罪。

我的问题是创建这样一个设计的最佳实践是什么?我使用的 DBMS 是 PostgreSQL。当然,访问最多的是每个字段的当前值。此外,只需要记录对值的更改,因此进行快照备份似乎不是执行此操作的合适方法。

我尝试搜索“日志”和“交易历史”,但没有找到结果。

4

1 回答 1

1

Martin Fowler 在他的“分析模式”一书中描述了金融交易系统的设计——这是关于 OO 设计而不是数据库设计,但值得一读。

传统的方法是创建一个代表“分类帐”的表格,如下所示:

transactionID | AccountID | TransactionDate | TransactionValue | OtherData...
-------------------------------------------------------------------

任何时间点的余额是截至该日期的“TransactionValue”的总和。

确实,这样的表往往会变得非常大——但像 Postgres 这样的数据库在管理大型数据集方面非常有效。在实践中,您可以轻松地在现代硬件上管理数千万或数亿条记录,只要您可以依靠良好的索引方案。

如果您确实遇到了性能限制,常见的解决方案是创建汇总条目 - 因此您可以将某个日期之前的所有记录移动到存档表中,并插入该日期的汇总记录。根据您的数据量,您可以按十年、年、月甚至周来执行此操作。

于 2012-12-05T16:48:50.983 回答