主题
CatchShop 积分模块数据字典
数据表概览
CatchShop 商城积分模块包含 5 个核心数据表:
| 表名 | 中文名称 | 用途 |
|---|---|---|
shop_point_products | 积分商品表 | 存储可用积分兑换的商品信息 |
shop_point_product_category | 积分商品分类表 | 积分商品的分类管理 |
shop_point_daily_sign_users | 用户签到统计表 | 用户签到统计数据 |
shop_point_daily_sign_user_records | 用户签到记录表 | 用户每次签到的详细记录 |
user_points_log | 积分变动日志表 | 用户积分获取和消费的完整记录 |
1. shop_point_products - 积分商品表
表说明:存储可用积分兑换的商品信息,包括积分价格、库存、限购规则等。
| 字段名 | 类型 | 长度 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|---|
id | int | 11 | 是 | - | 主键 ID |
product_id | int | 11 | 是 | - | 关联商品 ID,外键关联 shop_products.id |
category_id | int | 11 | 是 | - | 分类 ID,外键关联 shop_point_product_category.id |
points | int | 11 | 是 | - | 兑换所需积分数量 |
stock | int | 11 | 是 | 0 | 库存数量 |
sales | int | 11 | 是 | 0 | 销量统计 |
initial_sales | int | 11 | 否 | 0 | 初始销量(虚拟销量) |
is_purchase_limit | tinyint | 1 | 是 | 0 | 是否限购:1=限购,0=不限购 |
total_purchase_limit | int | 11 | 否 | 0 | 总限购数量 |
per_purchase_limit | int | 11 | 否 | 0 | 每单限购数量 |
sort | int | 11 | 否 | 0 | 排序权重,数值越大越靠前 |
status | tinyint | 1 | 是 | 1 | 状态:1=启用,0=禁用 |
creator_id | int | 11 | 否 | - | 创建人 ID |
created_at | int | 10 | 是 | - | 创建时间戳 |
updated_at | int | 10 | 是 | - | 更新时间戳 |
deleted_at | int | 10 | 否 | - | 软删除时间戳 |
索引信息:
- PRIMARY KEY (
id) - INDEX
idx_product_id(product_id) - INDEX
idx_category_id(category_id) - INDEX
idx_status_sort(status,sort)
关联关系:
product_id→shop_products.id(商品基础信息)category_id→shop_point_product_category.id(积分商品分类)
2. shop_point_product_category - 积分商品分类表
表说明:积分商品的分类管理,用于商品分组和前端展示。
| 字段名 | 类型 | 长度 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|---|
id | int | 11 | 是 | - | 主键 ID |
name | varchar | 50 | 是 | - | 分类名称 |
sort | int | 11 | 否 | 0 | 排序权重,数值越大越靠前 |
status | tinyint | 1 | 是 | 1 | 状态:1=启用,0=禁用 |
creator_id | int | 11 | 否 | - | 创建人 ID |
created_at | int | 10 | 是 | - | 创建时间戳 |
updated_at | int | 10 | 是 | - | 更新时间戳 |
deleted_at | int | 10 | 否 | - | 软删除时间戳 |
索引信息:
- PRIMARY KEY (
id) - INDEX
idx_status_sort(status,sort) - INDEX
idx_name(name)
3. shop_point_daily_sign_users - 用户签到统计表
表说明:记录用户签到的统计数据,包括总积分、签到天数、首次和最近签到时间。
| 字段名 | 类型 | 长度 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|---|
id | int | 11 | 是 | - | 主键 ID |
user_id | int | 11 | 是 | - | 用户 ID,外键关联用户表 |
total_points | int | 11 | 是 | 0 | 签到累计获得积分 |
sign_days | int | 11 | 是 | 0 | 累计签到天数 |
first_sign_at | int | 10 | 是 | - | 首次签到时间戳 |
last_sign_at | int | 10 | 是 | - | 最近签到时间戳 |
deleted_at | int | 10 | 否 | - | 软删除时间戳 |
索引信息:
- PRIMARY KEY (
id) - UNIQUE KEY
uk_user_id(user_id) - INDEX
idx_sign_days(sign_days) - INDEX
idx_last_sign_at(last_sign_at)
关联关系:
user_id→users.id(用户基础信息)
4. shop_point_daily_sign_user_records - 用户签到记录表
表说明:记录用户每次签到的详细信息,包括获得的积分和签到描述。
| 字段名 | 类型 | 长度 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|---|
id | int | 11 | 是 | - | 主键 ID |
user_id | int | 11 | 是 | - | 用户 ID,外键关联用户表 |
points | int | 11 | 是 | - | 本次签到获得的积分 |
description | varchar | 255 | 否 | - | 签到描述信息 |
created_at | int | 10 | 是 | - | 签到时间戳 |
updated_at | int | 10 | 是 | - | 更新时间戳 |
deleted_at | int | 10 | 否 | - | 软删除时间戳 |
索引信息:
- PRIMARY KEY (
id) - INDEX
idx_user_id_created(user_id,created_at) - INDEX
idx_created_at(created_at)
关联关系:
user_id→users.id(用户基础信息)
5. user_points_log - 积分变动日志表
表说明:记录用户积分的所有变动情况,包括获取和消费,确保积分流水的完整性和可追溯性。
| 字段名 | 类型 | 长度 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|---|
id | int | 11 | 是 | - | 主键 ID |
user_id | int | 11 | 是 | - | 用户 ID,外键关联用户表 |
amount | int | 11 | 是 | - | 积分变动数量,正数为增加,负数为减少 |
description | varchar | 255 | 是 | - | 变动描述/说明 |
remark | varchar | 255 | 否 | - | 管理员备注 |
created_at | int | 10 | 是 | - | 创建时间戳 |
updated_at | int | 10 | 是 | - | 更新时间戳 |
索引信息:
- PRIMARY KEY (
id) - INDEX
idx_user_id_created(user_id,created_at) - INDEX
idx_created_at(created_at) - INDEX
idx_amount(amount)
关联关系:
user_id→users.id(用户基础信息)
订单表相关字段
在 shop_orders 表中,与积分相关的字段:
| 字段名 | 类型 | 说明 |
|---|---|---|
points_amount | int | 积分抵扣金额(分) |
points_count | int | 使用的积分数量 |
points_reward | int | 订单奖励积分 |
业务规则说明
积分商品规则
- 库存管理:
stock字段记录实际库存,兑换时需检查库存充足性 - 限购规则:
is_purchase_limit = 1时启用限购total_purchase_limit限制用户总兑换数量per_purchase_limit限制单次兑换数量
- 销量统计:
sales为实际销量,initial_sales为虚拟销量,前端显示为两者之和
签到规则
- 唯一性:用户每天只能签到一次
- 连续性:通过缓存记录连续签到天数
- 奖励计算:基于连续签到天数和配置规则计算积分奖励
积分日志规则
- 完整性:所有积分变动必须记录日志
- 一致性:积分变动和日志记录必须在同一事务中完成
- 可追溯性:通过
description和remark字段记录变动原因