# 赠品表设计文档 ## 表结构说明 ### 表名:`gift` **用途**:存储系统中的赠品信息,包括赠课和代金券等赠品类型 ### 字段说明 | 字段名 | 类型 | 默认值 | 说明 | |--------|------|--------|------| | `id` | int(11) | AUTO_INCREMENT | 赠品主键ID | | `gift_name` | varchar(255) | '' | 赠品名称 | | `gift_type` | varchar(50) | '' | 赠品类型:course(赠课),voucher(代金券) | | `gift_time` | int(11) | 0 | 赠送时间(时间戳) | | `giver_id` | int(11) | 0 | 赠送来源人员ID | | `resource_id` | int(11) | 0 | 赠品归属资源ID | | `order_id` | int(11) | 0 | 赠品使用的订单ID(0表示未使用) | | `gift_status` | tinyint(4) | 1 | 赠品状态:1=未使用,2=已使用,3=已过期,4=已作废 | | `use_time` | int(11) | 0 | 赠品使用时间(时间戳) | | `create_time` | int(11) | 0 | 创建时间(时间戳) | | `update_time` | int(11) | 0 | 更新时间(时间戳) | | `delete_time` | int(11) | 0 | 删除时间(时间戳,0表示未删除) | ### 索引设计 #### 主键索引 - `PRIMARY KEY (id)` - 主键索引,自动创建 #### 普通索引 1. `IDX_gift_giver_id` - 赠送人员索引 - **用途**:根据赠送人员ID查询赠品 - **场景**:统计某个人员赠送的所有赠品 2. `IDX_gift_resource_id` - 资源ID索引 - **用途**:根据资源ID查询相关赠品 - **场景**:查询某个资源相关的所有赠品 3. `IDX_gift_order_id` - 订单ID索引 - **用途**:根据订单ID查询使用的赠品 - **场景**:查询某个订单中使用了哪些赠品 4. `IDX_gift_status` - 状态索引 - **用途**:根据赠品状态快速筛选 - **场景**:查询未使用、已使用、已过期等状态的赠品 5. `IDX_gift_type` - 类型索引 - **用途**:根据赠品类型快速筛选 - **场景**:分别查询赠课或代金券 6. `IDX_gift_time` - 赠送时间索引 - **用途**:根据赠送时间范围查询 - **场景**:统计某个时间段的赠品发放情况 ### 业务逻辑说明 #### 赠品状态流转 1. **未使用(1)** → **已使用(2)**:用户使用赠品时更新 2. **未使用(1)** → **已过期(3)**:系统定时任务检查过期 3. **未使用(1)** → **已作废(4)**:管理员手动作废 4. **已使用(2)**:终态,不可再变更 #### 关键业务场景 1. **赠品发放**:创建记录,设置 `gift_status=1` 2. **赠品使用**:更新 `order_id`、`use_time`、`gift_status=2` 3. **赠品过期**:定时任务更新 `gift_status=3` 4. **赠品作废**:管理员操作更新 `gift_status=4` ### 性能优化建议 1. **复合索引考虑**: - 如果经常按状态+类型查询,可考虑创建复合索引 `(gift_status, gift_type)` - 如果经常按时间范围+状态查询,可考虑创建复合索引 `(gift_time, gift_status)` 2. **分区表考虑**: - 如果数据量很大,可考虑按时间分区 3. **归档策略**: - 定期归档已删除或过期的赠品数据