我对正确的 SQL 解决方案有疑问。
当前情况:我的数据库包含带有银行交易(贷记和借记)的表。
- 信用交易被签署为正数(+),并且
- 借记交易为负金额 (-)。
使用数据库的应用程序是一个多用户 webapp,因此事务表包含许多行,它们引用不同的用户。一些 webapp 操作需要检查登录用户的实际余额,使用 Transactions 表并保存借记 Transaction(操作价格)。
我想到了这个机制的架构,有一些疑问:
每次用户请求时将余额计算为交易贷方和借方的总和是一个好主意吗?我知道这对 db 可能效率低下。也许我应该在某处保存快照?
当一个用户检查“余额”作为贷记/借记交易的总和,而另一个用户同时保存借记交易(因为他/她更快)时,如何确保数据凝聚力?我想到了一个悲观的锁,但我应该锁什么?我知道在 Postgresql(我使用的数据库)上可能无法使用聚合锁定 (SUM)。”
对不起我的英语,我希望我的问题是可以理解的。:)