我打算写一个简单的信用系统,用户可以在系统中“添加”,“扣除”信用.目前我正在考虑两种方法.
>简单一:将用户的信用存储在数据库中作为余额字段,并记录所有操作(“添加”,“扣除”),但不用于计算最新余额.
>基于历史记录:不要将余额存储在数据库中.通过查看交易历史来计算余额,例如(“加”,“扣除”)
我认为这两种情况都有效,但我想看看在设计这样一个系统时是否有任何警告,特别是我赞成基于历史的系统.
或者,有没有我使用的参考实现或开源模块?
更新:或者是否有像AuthLogic这样基于Ruby / Rail的模块,因此我可以插入和播放现有代码而无需重新发明轮子(例如事务,回滚,安全性等)?
解决方法
绝对使用两者.
>基于余额的方式使您可以快速访问当前金额.
>基于历史的方式为您提供审计.历史表应存储交易(如您所述),时间戳,交易发生前的余额,理想情况下是跟踪资金来源/目的地的方式.
见Ruby Toolbox for bookkeeping和Plutus double-entry bookkeeping gem.
此外,如果您的信用系统可能会影响用户,那么我建议您也使用日志记录,理想情况下请阅读安全日志验证和可证明的时间戳链接.
>有关记录详细信息,请参阅:techniques for ensuring verifiability of event log files.
>对于有信用的开源代码,您可能需要查看:http://www.gnucash.org/