用户成长体系需三张表:用户表扩展growth_value、level等字段;成长值流水表记录每次增减明细;等级规则表配置各等级阈值。升级逻辑须在事务中完成,确保一致性。

用户成长值与等级核心表设计
成长体系本质是记录用户行为、累积成长值、对应等级和权益。核心需要三张表:用户主表扩展字段、成长值流水表、等级规则表。
用户表(user)增加成长相关字段:
- growth_value:当前总成长值,INT 类型,建议用 BIGINT 防溢出
- level:当前等级,TINYINT 或 SMALLINT,冗余存储提升查询效率
- level_updated_at:上次升级时间,DATETIME,便于做等级活跃分析
成长值变动必须记流水(不可只更新总数)
每次加减成长值(如签到+10、发帖+20、违规-50)都应写入独立流水表,保证可追溯、可对账、可回滚。
成长流水表(user_growth_log)建议字段:
- id, user_id, amount:变动值,可正可负
- type:枚举类型,如 'sign_in', 'publish_post', 'admin_deduct'
- related_id:关联业务ID(如帖子ID、订单号),便于溯源
- created_at:精确到秒或毫秒,索引此字段支持按时间查账
等级规则用配置表,避免硬编码
等级门槛(如Lv1:0~99,Lv2:100~299)应存在数据库中,方便运营后台动态调整,无需改代码发版。
等级规则表(level_rule)结构示例:
使用模板与程序分离的方式构建,依靠专门设计的数据库操作类实现数据库存取,具有专有错误处理模块,通过 Email 实时报告数据库错误,除具有满足购物需要的全部功能外,成新商城购物系统还对购物系统体系做了丰富的扩展,全新设计的搜索功能,自定义成新商城购物系统代码功能代码已经全面优化,杜绝SQL注入漏洞前台测试用户名:admin密码:admin888后台管理员名:admin密码:admin888
- level:等级数字,主键
- min_value:该等级最低成长值(含)
- max_value:该等级最高成长值(不含)
- name, description:等级名称和描述,供前端展示
查当前等级时,用 SELECT * FROM level_rule WHERE min_value ? 即可匹配,注意索引覆盖 min_value 和 max_value。
升级逻辑放在事务里,防止并发错级
用户成长值变更后,需检查是否触发升级。这个判断+更新必须在同一个事务中完成,否则高并发下可能出现“成长值已加,但等级没升”或重复升级。
典型升级伪SQL流程:
- BEGIN TRANSACTION;
- UPDATE user SET growth_value = growth_value + 20 WHERE id = 123;
- SELECT growth_value, level INTO @gv, @lv FROM user WHERE id = 123;
- SELECT level FROM level_rule WHERE min_value @gv INTO @new_level;
- IF @new_level != @lv THEN UPDATE user SET level = @new_level, level_updated_at = NOW() WHERE id = 123;
- COMMIT;
生产环境建议将此逻辑封装为存储过程或由应用层用乐观锁(version字段)+重试实现。









