活动模块数据库设计
1. 数据表总览
| 表名 |
说明 |
| activity_config |
活动基础配置表,存储活动的基本信息和奖励 |
| activity_participation |
活动参与记录表,记录用户参与活动的情况 |
| user_activity_data |
用户活动数据表,存储用户在活动中的进度 |
| activity_condition |
活动条件表,定义活动的参与和完成条件 |
2. 详细表结构
2.1 activity_config (活动基础配置表)
| 字段 |
类型 |
说明 |
| id |
bigint |
主键 |
| name |
varchar(100) |
活动名称 |
| type |
tinyint |
活动类型(1:礼包活动, 2:限时活动, 3:任务活动) |
| description |
text |
活动描述 |
| start_time |
datetime |
开始时间 |
| end_time |
datetime |
结束时间 |
| status |
tinyint |
活动状态(0:未开始, 1:进行中, 2:已结束, 3:已关闭) |
| display_order |
int |
显示顺序,数值越大越靠前 |
| icon |
varchar(255) |
活动图标URL |
| banner |
varchar(255) |
活动横幅URL |
| reward_group_id |
int |
奖励组ID(关联game_reward_groups表) |
| reward_group_code |
varchar(50) |
奖励组编码(关联game_reward_groups表的code字段) |
| config_params |
json |
活动特定配置参数,JSON格式 |
| created_at |
timestamp |
创建时间 |
| updated_at |
timestamp |
更新时间 |
2.2 activity_participation (活动参与记录表)
| 字段 |
类型 |
说明 |
| id |
bigint |
主键 |
| user_id |
bigint |
用户ID |
| activity_id |
bigint |
活动ID |
| participate_time |
datetime |
参与时间 |
| reward_status |
tinyint |
奖励状态(0:未领取, 1:已领取, 2:已过期) |
| completion_status |
tinyint |
完成状态(0:进行中, 1:已完成, 2:已失败) |
| completion_time |
datetime |
完成时间 |
| created_at |
timestamp |
创建时间 |
| updated_at |
timestamp |
更新时间 |
2.3 user_activity_data (用户活动数据表)
| 字段 |
类型 |
说明 |
| id |
bigint |
主键 |
| user_id |
bigint |
用户ID |
| activity_id |
bigint |
活动ID |
| progress |
int |
活动进度(如任务完成数等) |
| progress_data |
json |
详细进度数据,JSON格式 |
| last_update |
timestamp |
最后更新时间 |
| created_at |
timestamp |
创建时间 |
| updated_at |
timestamp |
更新时间 |
2.4 activity_condition (活动条件表)
| 字段 |
类型 |
说明 |
| id |
bigint |
主键 |
| activity_id |
bigint |
关联活动ID |
| condition_type |
tinyint |
条件类型(1:等级要求, 2:道具要求, 3:时间要求等) |
| condition_params |
json |
条件参数,JSON格式 |
| is_participation_condition |
tinyint |
是否为参与条件(0:否, 1:是) |
| is_completion_condition |
tinyint |
是否为完成条件(0:否, 1:是) |
| display_order |
int |
显示顺序 |
| created_at |
timestamp |
创建时间 |
| updated_at |
timestamp |
更新时间 |
3. 表关系图
erDiagram
activity_config ||--o{ activity_participation : "1:N"
activity_config ||--o{ user_activity_data : "1:N"
activity_config ||--o{ activity_condition : "1:N"
activity_participation }|--|| user_activity_data : "关联"
4. 索引设计
为了提高查询性能,各表应设置以下索引:
4.1 activity_config 表索引
- 主键索引:
id
- 普通索引:
type, status, reward_group_id, reward_group_code
- 复合索引:
(start_time, end_time), (status, display_order)
4.2 activity_participation 表索引
- 主键索引:
id
- 外键索引:
activity_id, user_id
- 复合索引:
(user_id, activity_id), (activity_id, reward_status)
4.3 user_activity_data 表索引
- 主键索引:
id
- 外键索引:
activity_id, user_id
- 复合索引:
(user_id, activity_id), (activity_id, progress)
4.4 activity_condition 表索引
- 主键索引:
id
- 外键索引:
activity_id
- 复合索引:
(activity_id, condition_type), (activity_id, is_participation_condition)
5. 数据库创建脚本
-- 创建活动基础配置表
CREATE TABLE `activity_config` (
`id` bigint NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL COMMENT '活动名称',
`type` tinyint NOT NULL COMMENT '活动类型',
`description` text COMMENT '活动描述',
`start_time` datetime NOT NULL COMMENT '开始时间',
`end_time` datetime NOT NULL COMMENT '结束时间',
`status` tinyint DEFAULT '0' COMMENT '活动状态',
`display_order` int DEFAULT '0' COMMENT '显示顺序',
`icon` varchar(255) DEFAULT NULL COMMENT '活动图标URL',
`banner` varchar(255) DEFAULT NULL COMMENT '活动横幅URL',
`reward_group_id` int DEFAULT NULL COMMENT '奖励组ID(关联game_reward_groups表)',
`reward_group_code` varchar(50) DEFAULT NULL COMMENT '奖励组编码(关联game_reward_groups表的code字段)',
`config_params` json DEFAULT NULL COMMENT '活动特定配置参数',
`created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_type` (`type`),
KEY `idx_status` (`status`),
KEY `idx_reward_group_id` (`reward_group_id`),
KEY `idx_reward_group_code` (`reward_group_code`),
KEY `idx_time` (`start_time`, `end_time`),
KEY `idx_status_order` (`status`, `display_order`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='活动基础配置表';
-- 创建活动参与记录表
CREATE TABLE `activity_participation` (
`id` bigint NOT NULL AUTO_INCREMENT,
`user_id` bigint NOT NULL COMMENT '用户ID',
`activity_id` bigint NOT NULL COMMENT '活动ID',
`participate_time` datetime NOT NULL COMMENT '参与时间',
`reward_status` tinyint DEFAULT '0' COMMENT '奖励状态',
`completion_status` tinyint DEFAULT '0' COMMENT '完成状态',
`completion_time` datetime DEFAULT NULL COMMENT '完成时间',
`created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_user_id` (`user_id`),
KEY `idx_activity_id` (`activity_id`),
KEY `idx_user_activity` (`user_id`, `activity_id`),
KEY `idx_activity_reward` (`activity_id`, `reward_status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='活动参与记录表';
-- 创建用户活动数据表
CREATE TABLE `user_activity_data` (
`id` bigint NOT NULL AUTO_INCREMENT,
`user_id` bigint NOT NULL COMMENT '用户ID',
`activity_id` bigint NOT NULL COMMENT '活动ID',
`progress` int DEFAULT '0' COMMENT '活动进度',
`progress_data` json DEFAULT NULL COMMENT '详细进度数据',
`last_update` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_user_id` (`user_id`),
KEY `idx_activity_id` (`activity_id`),
KEY `idx_user_activity` (`user_id`, `activity_id`),
KEY `idx_activity_progress` (`activity_id`, `progress`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户活动数据表';
-- 创建活动条件表
CREATE TABLE `activity_condition` (
`id` bigint NOT NULL AUTO_INCREMENT,
`activity_id` bigint NOT NULL COMMENT '关联活动ID',
`condition_type` tinyint NOT NULL COMMENT '条件类型',
`condition_params` json NOT NULL COMMENT '条件参数',
`is_participation_condition` tinyint DEFAULT '0' COMMENT '是否为参与条件',
`is_completion_condition` tinyint DEFAULT '0' COMMENT '是否为完成条件',
`display_order` int DEFAULT '0' COMMENT '显示顺序',
`created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_activity_id` (`activity_id`),
KEY `idx_activity_type` (`activity_id`, `condition_type`),
KEY `idx_participation` (`activity_id`, `is_participation_condition`),
KEY `idx_completion` (`activity_id`, `is_completion_condition`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='活动条件表';