请教会员卡的数据库设计、余额的处理

目前
cards 会员卡表
-id
-name 姓名
-banlance 余额

card_recharge 会员卡充值表
-id
-card_id 卡片id
-amount 充值金额
-after_amount 剩余金额

tickets 会员消费小票表
-id
-weight 重量
-amount 消费金额
-after_amount 剩余金额

cardlogs 会员卡变动记录表
-id
-card_id
-logable_type
-logable_id
-amount 消费金额
-after_amount 剩余金额

card_recharge 、 tickets 和 cardlogs 多态关联

现在充值card_recharge、消费tickets 完都会在cardlogs 表里写记录,然后更新cards表里面的余额,余额都是获取card表的余额增减计算。

现在消费tickets 有时候会录入错误,涉及到修改的话,更新余额会不准确,我是获取card 的余额减去tickets的消费金额等于最后的余额,然后在更新card的余额。如果编辑之前的tickets的消费金额就无法正确更新card的余额

大家对会员卡数据库这类都是怎么设计的呢 ,会员卡的余额都是怎么处理的呢,消费一次写一次,还是获取数据后sum一下

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 4

之前在社区看到一个钱包设计的,你可以参考一下 都是差不多的

2年前 评论

card_recharge 和 tickets 可以合二为一 通过类型去判断充值或是消费。剩下三张表就可以进行关联更新了。消费错误建议使用事务操作并记录相关错误日志。

2年前 评论

充值和消费应该放一张表里,另外会员卡余额不要用消费tickets来统计,应该在消费的时候根据消费金额来更新cards 表,用事务操作保证cards和充值消费表的一致性。

2年前 评论
Complicated

不是高并发的话,开事务就能解决吧

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!