现有三表:
1.account: accountID, ownerID, blance...;
2.income:  incomeID, accountID, incomeAmount, time...
3.payout:  payoutID, accountID, incomeAmount, time...大家都知道账户余额 balance = Sum(incomeAmount) - Sum(incomeAmount),
但是到底要不要在account表中设一个balance字段呢?
如果设,每次交易都要更新account的balance;
若不设,每次查询余额都要来次 balance = Sum(incomeAmount) - Sum(incomeAmount);有没有更好的办法?

解决方案 »

  1.   

    一般的财务表设计:由于财务系统 1)使用时间比较长(N年),2)记录比较多,每天的分录很多,3)主要操作是查询,汇总 4)实时性要求高,可靠性要求高。所以一般不设置这个balance 字段,而由  balance = Sum(incomeAmount) - Sum(payout:t), 求得,但随着历史数据的增长,显示速度上会无法接受。因此再建一表 accountBalance 盘点表,这样也与实现的账务操作(月结)所对应。 表 accountBalance  (accountID, monthid, balance,...)这样,当前实时balance = Sum(本期incomeAmount) - Sum(本期ipayout:) + 上期 balance
      

  2.   

    数据量大的话 增加个字段 每次更新数据的时候顺便把该字段set值
      

  3.   

    还是Acmain说的有道理,再加一表搞定,每次balance查询量也就最后一个月的数据量。非常好。