我的数据库中有三个表BILL,RECHARGE AND SENT.The BILL表具有名为UNITBALS的列,RECHARGE表具有名为UNITS的列SENT表具有名为VOLUME.What的列通常应该发生的情况是,当客户对其帐户进行充值时,他的新UNITS将与其D9表上的旧UNITS相加,D11表上发送的全部消息的D10将从D13表上的D12和中减去结果将用于更新BILL table.But上的UNITBALS,现在的问题是,当客户充值他们的帐户时,账单表上的UNITBALS被更新为新的余额,或者有时UNITBALS被更新为比它应该更高的值。be.There现在在我的数据库中是一种不一致,客户正在抱怨。
发布于 2011-05-27 00:38:37
因此,据我所知,您正在将聚合计算的结果存储在BILL.UNITBALS上
具体来说
BILL.UNITBALS = SUM(RECHARGE.UNITS) - SUM(SENT.VOLUME)
除非你犯了一个严重的错误,否则可能发生的事情是由于一个挂起的事务和transaction isolation level,你丢失了一个你应该考虑的值。
由于这个问题,我尝试并尽我所能避免在数据库中存储计算结果
通常,这意味着我每次检索数据时都要进行计算。这可能是(也可能不是)性能问题,但至少您获得了更多获取正确信息的机会。
如果性能惩罚太高,那么我建议您每24小时进行一次对账,并添加免责声明,如“付款将在X个工作日内不会出现在您的帐户上”。
https://stackoverflow.com/questions/6141652
复制相似问题