我打算写一个简单的信用系统,用户可以" 添加"," 扣除"系统中的学分。目前我正在考虑两种方法。
简单的一个:存储用户'在数据库中记入balance
字段,所有操作("添加","扣除")都会被记录,但不会用于计算最新余额。
基于历史记录:不要将余额存储在数据库中。通过查看交易历史来计算余额,例如("添加","扣除")
我认为这两种情况都有效,但我想看看在设计这样一个系统时是否有任何警告,特别是我赞成History based
系统。
或者,我使用的参考实现或开源模块是什么?
更新:或者是否有基于Ruby / Rail的模块,如AuthLogic
,所以我可以插入和播放我现有的代码而无需重新发明轮子(例如事务,回滚,安全性等)?
答案 0 :(得分:13)
绝对使用两者。
基于余额的方式可让您快速访问当前金额。
基于历史的方式为您提供审核。历史表应该存储交易(如您所述),时间戳,交易发生前的余额,理想情况下是跟踪资金的方式。源/目的地。
请参阅Ruby Toolbox for bookkeeping和Plutus double-entry bookkeeping gem。
此外,如果您的信用系统可能会影响用户,那么我建议您也使用日志记录,理想情况下请阅读安全日志验证和可证明的时间戳链接。
有关记录详细信息,请参阅:techniques for ensuring verifiability of event log files。
对于有信用的开源代码,您可能需要查看:http://www.gnucash.org/
答案 1 :(得分:7)
添加和扣除信用意味着您可能还需要了解这些信用来自哪里以及去哪里。每当您遇到这种情况时,无论是货币还是其他需要跟踪和计算的数量,您都应该考虑使用双重记账模式。
这种模式已经运作了几个世纪,并为您提供了所需的所有功能,以便能够看到您的余额以及它们如何成为这样:
如果您不熟悉详细信息,请从此处开始:Double Entry Bookkeeping或询问已经参加过簿记入门课程的任何人。
您要求使用Ruby on Rails开源解决方案,您可以将其插入到应用程序中。您可以使用Plutus。以下是Github上该项目描述的摘录:
plutus插件提供了完整的双重记账系统 用于任何Ruby on Rails应用程序。插件如下 双重记账簿的做法。 ... Plutus由表组成 维护您的帐户,条目和借记和信用。每个条目都可以 有很多借记和贷记。条目表,记录您的 商业交易本质上是您的会计期刊。
答案 2 :(得分:1)
有时候,您需要在一个屋檐下统一几笔交易。我建议创建一个名为“令牌”的第三个表格。这将是付款经理,您将统一该令牌下的分组交易。
token.transactions =(例如,从交易t中选择*,其中t.token =" 123")