计算用户当前钱包余额的最佳方法是什么?

eNe*_*tcH 1 php mysql transactions codeigniter activerecord-calculations

我正在尝试为 Web 应用程序实现钱包。我现在提出的数据库设计是一个钱包交易表,如下所示:

wallet_tr_id | user_id | amount | tr_type (debit/credit) | datetime | tr_id
Run Code Online (Sandbox Code Playgroud)

应用程序中的用户可以通过现金或钱包信用进行交易。还有另一个 transactions表保存所有交易信息,通过钱包信用支付/赚取的信息使用外键输入到上表中tr_id

现在显示用户他/她当前钱包余额的最佳方式是什么?

我应该sum total of credits - sum total of debits为该用户计算,还是应该current_balance在其他表中为用户维护?

PS:最终不会有任何用户的大量交易。

Tho*_*ner 7

无需存储余额。就按照你说的计算一下:

select sum(case when tr_type = 'credit' then amount else -amount end) as balance
from transactions
where user_id = 12345;
Run Code Online (Sandbox Code Playgroud)

  • 这是一个很好的答案,但是将当前余额存储在单独的表中并在用户想要查看时检索它不是更容易吗?想象一下,您想要在多个位置显示当前余额,并且每次都必须对 10M 条交易记录执行此计算。 (3认同)
  • @Delali:我们尝试避免数据库中的冗余,因为这可能导致不一致。但是,是的,您可以将余额存储在用户表中,并编写一个触发器来更新每笔新交易的余额。因此,您甚至可以稍后从数据库中删除交易,并且仍然知道当前余额。正如OP提到的,每个用户不会有很多交易,但是,在这种特殊情况下不需要这样做;从交易表中获取余额就足够了。 (2认同)