【发布时间】:2013-02-21 12:57:54
【问题描述】:
我在数据库income_funds 和expenditure_funds 中有两个集合:
income_funds
timestamp
amount
status (not confirmed, confirmed, refunded)
expenditure_funds
timestamp
amount
我需要获取当前帐户余额并获取有关使用情况的报告。如何更好地使用此集合实现计费逻辑?
最简单的方法(无需额外数据):
- 获取账户余额
sum(confirmed income_funds) - sum(expenditure_funds) - 按期获取报表获取收支资金
但我不喜欢我必须一直计算帐户余额。
添加帐号收藏:
我会加account收藏:
account
balance
- 获取账户余额只需获取
account.balance - 按以前的方法获取报告
但我不喜欢当任何资金发生变化(添加或更改状态)时,我必须随时更改余额。为了验证账户余额,我必须像第一种方法一样计算所有资金。如果我弄错了,我将不知道它是如何以及何时发生的。
添加周期集合:
我会加period收藏:
period
is_closed (yes, no)
start_timestamp
end_timestamp
start_balance
end_balance
- 最后获得账户余额返回
period.end_balance - 像以前的方法一样获取报告,但很容易按时间段获取时间戳
当任何资金在此期间发生变化时,我必须随时更改end_balance。但是我可以按周期验证余额,如果有错误我会知道它发生在这个周期。
最后一种方法最喜欢我,但也许有人可以在我的结论中给我建议或知道其他解决方案。
【问题讨论】:
-
只是一个旁注:不要将时间戳称为“datetime”,与模块“datetime”一起使用可能会导致问题。我的建议是将它们命名为“时间戳”。
标签: database-design business-logic billing application-design web-application-design