首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用多个成本表计算用户余额

使用多个成本表计算用户余额
EN

Stack Overflow用户
提问于 2018-06-10 03:44:05
回答 1查看 100关注 0票数 1

我们正在构建一个SaaS产品,用户可以从各种类型的交易中产生成本,例如:

发送短消息messages

  • Storing

  • Making phone calls

我们已经构建了存储每个服务的成本的系统,例如,call_audit表如下所示:

代码语言:javascript
复制
Date       Call ID  Our Cost  User Cost Currency Duration User ID
---------- -------- --------- --------- -------- -------- -------
2018-01-02 sm_123   0.01      0.02      USD      72       us_1

sms_audit表如下所示:

代码语言:javascript
复制
Date       SMS ID   Our Cost  User Cost Currency User ID
---------- -------- --------- --------- -------- -------
2018-01-02 sm_123   0.01      0.02      USD      us_1

然后是一个包含用户付款和退款的payment_audit表:

代码语言:javascript
复制
Date       User ID  Amount Currency Type 
---------- -------- ------ -------- ----
2018-01-02 us_1     12     USD      CHARGE
2018-01-02 us_1     -2     USD      REFUND

我们也有一个带有balance列的user表,当用户遇到电话、短信费用或退款时,我们会递减该列。当用户向他们的账户(如上的CHARGE)付款时,我们会递增它。

但展望未来,我认为我们需要更具弹性的东西,而不是在代码中更新的单个余额数字。

一个改进是使用触发器而不是代码来更新余额数字。

另一种方法是跨多个表计算用户的总成本和付款,并对批量进行求和。随着表增加到数千个事务,我可以想象这将成为一个缓慢的计算。

我们想到的另一种方法是创建一个包含debitcredit和running balance列的balance_transactions表。当然,这会导致行之间的传递依赖,如果寻求良好规范化的DB,这并不是很好。这也意味着我们在复制数据,但在现实世界中,这是一种可以接受的权衡吗?

EN

回答 1

Stack Overflow用户

发布于 2018-06-10 04:06:01

您可以使用实体化视图来避免复制数据。请注意,更新余额(以任何方式-通过应用程序、触发器、部分运行余额)已经复制了数据。因此,您应该运行一些验证过程,以便在出现差异时发出警报。这样的验证过程应该完成所有的计算,所以它们也可以填充物化视图。

然而,实际的解决方案取决于您需要这些数据的频率。例如,如果您为了开票目的而每月获取所有客户余额,请不要重复它们。但是,如果您在每次客户操作后打印余额,例如,在某种交易确认(如PDF生成并通过电子邮件发送给客户)中,您可能希望以显示给客户的形式保存运行余额,因为他拥有余额证据。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50777896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档