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

目前
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一下

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 4

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

3年前 评论

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

3年前 评论

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

3年前 评论
Complicated

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

3年前 评论

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