如何设计数据库来计算账户余额?
1) 目前我从交易表计算账户余额 在我的交易表中,我有“描述”和“金额”等。
然后,我会将所有“金额”值相加,得出用户的账户余额。
我把这个给我的 friend 看了,他说这不是一个好的解决方案,当我的数据库增长时它会变慢吗????他说我应该创建单独的表来存储计算出的账户余额。如果这样做,我将不得不维护两个表,这有风险,账户余额表可能会不同步。
有什么建议吗?
编辑:选项 2:我是否应该在我的交易表“余额”中添加一个额外的列。 现在我不需要通过很多行数据来执行我的计算。
例子 约翰购买了 100 美元的信用额度,他欠了 60 美元,然后他增加了 200 美元的信用额度。
金额 $100,余额 $100。
金额 - 60 美元,余额 40 美元。
金额 $200,余额 $240。
最佳答案
一个从未被优雅解决的古老问题。
我使用过的所有银行业务包都将余额存储在帐户实体中。从运动历史中即时计算它是不可想象的。
正确的做法是:
- 移动台有一个“开口” 每个账户的余额交易。你需要 几年后当你 需要将旧 Action 移出 主动运动表到历史 表。
- 帐户实体有余额 领域
- 运动有触发器 更新帐户的表 贷方和借方账户的余额。显然,它有 promise 控制。如果你不能有触发器,那么需要有一个独特的模块,它在 promise 控制下编写 Action
- 你有一个“安全网”计划 可以离线运行,重新计算 所有天平和显示器(和 选择性纠正)错误 余额。这对 测试。
一些系统将所有移动存储为正数,并通过反转从/到字段或使用标志来表示贷方/借方。就个人而言,我更喜欢贷方字段、借方字段和签名金额,这使得冲销更容易跟踪。
请注意,这些方法适用于现金和证券。
证券交易可能会更加棘手,尤其是对于公司行为,您需要处理一个交易来更新一个或多个买卖双方的现金余额、他们的证券头寸余额以及可能的经纪人/托管人。
关于sql-server - 数据库设计 : Calculating the Account Balance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4373968/