“余额”表示贷方总和与借方总和之间的差额。以下简化架构代表一个示例:
架构 http://dl.dropbox.com/u/10177092/Personal/stackoverflow_question.png
注意“余额”栏。我已经确定了三种确定平衡的方法:
(1) 在更新贷方或借方表(以及更新余额)时,将代码包装在Transaction 块中。例如:
ActiveRecord::Base.transaction do
current_user.credits.credit(100)
current_user.balance.increment(100)
end
(2) 不要包含“余额”列 - 而是在每次请求时计算余额:
credit = current_user.credits.sum('amount')
debit = current_user.debits.sum('amount')
balance = credits - debits
(3) 创建数据库视图。
我将不胜感激有关以下方面的建议:
- 每种方法的优点和缺点。
- 替代方法。
在我看来,计算余额(例如 2. 和 3.)最能确保价值的完整性。但是,我担心(2)可能会因为用户进行额外的交易而变得低效。数据库视图在理论上似乎是一个合理的选择,但我不相信rails_sql_views支持 Rails 3,而且我注意到有几个线程暗示数据库视图是不可取的/通常与遗留数据库相关联。