数据库设计.md 8.0 KB

活动模块数据库设计

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='活动条件表';