积分表设计

表结构设计

由于业务需要可以作废还原等操作,所以设计的稍微复杂,如果没有这种业务需求,可以去除扣减积分详情表以及可用积分表去除record_id并合并相同过期时间的积分,然后在账号中冗余可用积分及最近过期的积分过期时间

积分记录表 integral_record

此表对应的是业务操作引起的积分变化记录

字段名 类型 长度 说明
id bigint 20 主键id
type smallint 11 积分记录类型
original_id varchar 40 原始记录id
value int 11 积分值
expire_time datetime 3 过期时间
reason varchar 255 积分增减原因
user_id varchar 40 用户id
deleted tinyint 4 删除标记
create_time datetime 3 创建时间
update_time datetime 3 修改时间

可用积分表 usable_integral

此表对应的是可用的积分记录,当前积分根据此表值计算得出

字段名 类型 长度 说明
id bigint 20 主键id
record_id bigint 20 积分表中积分记录id
value int 11 积分值
expire_time datetime 3 过期时间
user_id varchar 40 用户id
deleted tinyint 4 删除标记
create_time datetime 3 创建时间
update_time datetime 3 修改时间

扣减积分详情表 reduce_integral_detail

字段名 类型 长度 说明
id bigint 20 主键id
reduce_id bigint 20 积分表中扣减积分记录id
add_id bigint 20 积分表中新增的积分记录id
used_value int 11 扣减的积分值
expire_time datetime 3 原新增的积分记录的过期时间
user_id varchar 40 用户id
deleted tinyint 4 删除标记
create_time datetime 3 创建时间
update_time datetime 3 修改时间

场景模拟

2020-04-01当天记录

某用户积分记录表如下,其他额外信息暂时忽略

积分记录表id 用户id 积分值 添加时间 过期时间 类型 备注
1 1 50 2019-04-02 2020-04-02 扫码获取 新增积分
2 1 50 2019-04-04 2020-04-04 扫码获取 新增积分
3 1 100 2019-04-04 2020-04-04 扫码获取 新增积分
4 1 -30 2020-04-01 2020-04-01 积分兑换 使用积分

可用积分表

可用积分表id 用户id record_id 可用积分值 修改时间 过期时间 deleted
1 1 1 20 2020-04-01 2020-04-02 未删除
2 1 2 50 2019-04-04 2020-04-04 未删除
3 1 3 100 2019-04-04 2020-04-04 未删除

扣减积分详情表

记录id 用户id add_id
新增积分id
reduce_id
扣减积分id
used_value
使用积分
创建时间 过期时间
1 1 1 4 30 2020-04-01 2020-04-01

2020-04-03当天记录

某用户积分记录表如下,其他额外信息暂时忽略

积分记录表id 用户id 积分值 添加时间 过期时间 类型 备注
1 1 50 2019-04-02 2020-04-02 1(扫码获取) 新增积分
2 1 50 2019-04-04 2020-04-04 1(扫码获取) 新增积分
3 1 100 2019-04-04 2020-04-04 1(扫码获取) 新增积分
4 1 -30 2020-04-01 2020-04-01 2(积分兑换) 使用积分
5 1 -20 2020-04-01 2020-04-01 3(积分过期) 积分过期

可用积分表

可用积分表id 用户id record_id 可用积分值 修改时间 过期时间 deleted
1 1 1 0 2020-04-02 2020-04-02 删除
2 1 2 50 2019-04-04 2020-04-04 未删除
3 1 3 100 2019-04-04 2020-04-04 未删除

扣减积分详情表

记录id 用户id add_id
新增积分id
reduce_id
扣减积分id
used_value
使用积分
创建时间 过期时间
1 1 1 4 30 2020-04-01 2020-04-01
2 1 1 5 20 2020-04-02 2020-04-02

2020-04-03 积分兑换80后

积分记录表id 用户id 积分值 添加时间 过期时间 类型 备注
1 1 50 2019-04-02 2020-04-02 1(扫码获取) 新增积分
2 1 50 2019-04-04 2020-04-04 1(扫码获取) 新增积分
3 1 100 2019-04-04 2020-04-04 1(扫码获取) 新增积分
4 1 -30 2020-04-01 2020-04-01 2(积分兑换) 使用积分
5 1 -20 2020-04-01 2020-04-01 3(积分过期) 积分过期
6 1 -80 2020-04-01 2020-04-01 3(积分兑换) 积分兑换

可用积分表

可用积分表id 用户id record_id 可用积分值 修改时间 过期时间 deleted
1 1 1 0 2020-04-02 2020-04-02 删除
2 1 2 0 2020-04-03 2020-04-04 删除
3 1 3 70 2020-04-03 2020-04-04 未删除

扣减积分详情表

记录id 用户id add_id
新增积分id
reduce_id
扣减积分id
used_value
使用积分
创建时间 过期时间
1 1 1 4 30 2020-04-01 2020-04-01
2 1 1 5 20 2020-04-02 2020-04-02
3 1 2 6 50 2020-04-03 2020-04-04
4 1 3 6 30 2020-04-03 2020-04-04

额外说明

  1. 积分优先扣除最早过期的且小面值的积分

  2. 每天需要定时扫码可用积分表,将过期积分删除,并在积分记录表标注好过期记录以及扣减积分详情表记录扣减值

  3. 积分总额可直接根据可用积分值计算(即使过期积分没即使删除,也可以通过计算过滤来实现)

  4. 校验等式: 扣减积分表中add_id为a的所有使用积分和 + 可用积分表中record_id为a的可用积分值 = 积分记录表id为a的积分值

    例如:扣减积分表 add_id=1的使用积分为(30 + 20) + 可用积分表record_id=1的可用积分值(0) = 积分记录表id为1的积分值50

思路参考: https://my.oschina.net/funcy/blog/1975523

带过期时间的积分系统表设计相关推荐

  1. Day814.电商系统表设计优化案例分析 -Java 性能调优实战

    电商系统表设计优化案例分析 Hi,我是阿昌,今天学习记录的是关于电商系统表设计优化案例分析. 如果在业务架构设计初期,表结构没有设计好,那么后期随着业务以及数据量的增多,系统就很容易出现瓶颈. 如果表 ...

  2. 简简单单做一个带过期时间的内存缓存

    做手机验证码的时候,一般都有五分钟或十分钟的限时机制,所以就需要把"号码–验证码"的信息暂存起来,过期便无效--类似于 Redis 自带过期的机制就适合了.不过应用 Redis 此 ...

  3. redis查看key的过期时间_面试官:你在Redis中设置过带过期时间的Key吗?

    点击上方小伟后端笔记关注公众号 每天阅读Java干货文章 熟悉Redis的同学应该知道,Redis的每个Key都可以设置一个过期时间,当达到过期时间的时候,这个key就会被自动删除. 在为key设置过 ...

  4. redis list设置过期时间_面试官:你在Redis中设置过带过期时间的Key吗?

    点击上方小伟后端笔记关注公众号 每天阅读Java干货文章 熟悉Redis的同学应该知道,Redis的每个Key都可以设置一个过期时间,当达到过期时间的时候,这个key就会被自动删除. 在为key设置过 ...

  5. 根据数据库表结构生成Excel表设计——源码设计说明

    根据数据库表结构生成Excel表设计 在系统运维的过程中,很多时候大家都不喜欢改文档,修改了数据库字段后很少同步再更新表设计文档的,这就导致系统运行一段时间后,系统表设计与实际生产跑业务的设计出入很大 ...

  6. 根据数据库表结构生成Excel表设计——工具介绍

    根据数据库表结构生成Excel表设计 最近又接手了一些老系统,库表设计啥的都没有,十来个系统,每个系统都几十张表,一个个的补感觉太难了,合计了一下感觉还是搞个工具比较好. 在系统运维的过程中,很多时候 ...

  7. 根据自己真实项目,设计的一个积分系统

    1.积分系统的设计 2.业务需求的描述 假设面试官现在给出来对于这个电商平台的积分兑换系统的相关需求如下: 用户在电商平台里平时通过购买商品.晒单评论可以有不断的积累积分 积累到足够的积分后,就可以在 ...

  8. 面试官问我:如何设计 QQ、微信等第三方账号登陆 ?还要我说出数据库表设计!...

    公众号关注 "GitHubDaily" 设为 "星标",每天教你学编程! 低调的码农  | https://sourl.cn/tzZUzN 多账户的统一登录 名 ...

  9. 面试官问我:如何设计 QQ、微信等第三方账号登陆 ?还要我说出数据库表设计!......

    点击上方"五分钟学算法",选择"星标"公众号 重磅干货,第一时间送达 低调的码农|https://sourl.cn/tzZUzN 多账户的统一登录 名称解释 这 ...

  10. java如何保证redis设置过期时间的原子性_redis专题系列22 -- 如何优雅的基于redis实现分布式锁

    几个概念 线程锁:主要用来给方法.代码块加锁.当某个方法或代码使用锁,在同一时刻仅有一个线程执行该方法或该代码段.线程锁只在同一JVM中有效果,因为线程锁的实现在根本上是依靠线程之间共享内存实现的,比 ...

最新文章

  1. windows7下,Java中利用JNI调用c++生成的动态库的使用步骤
  2. python编写程序的一般步骤-Python编写win程序的操作流程
  3. 多项式加减 List
  4. ISA Server 2004服务器发布DHCP服务器
  5. 150929-拖延高于懒-HTML(End)
  6. 不要变得迟钝,努努力,什么都迎刃而解
  7. 怎样设置电脑壁纸_怎样把C盘设置成禁止安装任何软件?教你两个方法,告别电脑卡顿...
  8. 取消锚(a/)点击后页面跳转的几种方法
  9. 8个优质自学网站收藏
  10. Ubuntu Class ZipArchive not found
  11. 《电路》邱关源 思维导图 第一章-电路模型和电路定律
  12. 二层、三层与四层交换机
  13. Predicting drug–disease associations through layer attention graph convolutional network
  14. vnc下:无法执行默认的终端模拟器
  15. DLM learning materials
  16. 计算机的码片是指什么作用,计算机通信作业共有四个站进行码分多址的CDMA通信4个站的码片 爱问知识人...
  17. linux服务器自动断开,解决centos7服务器用ssh连接老是自动断开问题
  18. opencv遍历像素的方式
  19. 26万人的巨复杂考勤自动核算,比亚迪搞定了!
  20. 在不同的库存情况下,亚马逊CPC广告的投放策略会有什么改变呢?

热门文章

  1. Could not load requested class
  2. 微信40125错误的坑
  3. 微信公众号开发诡异问题:errcode:40125,errmsg解决方案
  4. 安卓开发调用python脚本_android开发调用python脚本
  5. matlab怎么表示对角阵,matlab – 如何基于每一行将矩阵转换为一堆对角矩阵?
  6. 整流、滤波与线性串联型稳压电源工作原理
  7. CentOS 6.5 Thinkpad 小红点(TrackPoint)设置
  8. 成功架构设计的关键要素
  9. 修改计算机ip 批处理,怎么使用批处理bat设置静态IP地址?
  10. 阿里云弹性云桌面解决方案、高性能GPU型云桌面用于设计、建模、影视制作