# 数据库迁移指南

## 数据库配置

**服务器地址**: 8.148.151.56:3306
**数据库名**: reading_platform
**用户名**: root
**密码**: reading_platform_pwd

---

## 需要创建的表

本次迁移需要创建以下 7 个新表：

1. **course_package** - 课程套餐表
2. **course_package_course** - 套餐课程关联表
3. **tenant_package** - 租户套餐关联表
4. **course_lesson** - 课程环节表
5. **lesson_step** - 教学环节表
6. **lesson_step_resource** - 环节资源关联表
7. **theme** - 主题字典表

---

## 执行方式

### 方式 1：使用数据库管理工具（推荐）

1. 打开 Navicat、phpMyAdmin、DBeaver 等数据库管理工具
2. 连接到数据库：`8.148.151.56:3306`
3. 选择数据库：`reading_platform`
4. 打开 SQL 执行窗口
5. 复制下面的 SQL 脚本并执行

### 方式 2：使用 MySQL 命令行

```bash
mysql -h 8.148.151.56 -P 3306 -u root -preading_platform_pwd reading_platform < V20260312__create_new_tables.sql
```

### 方式 3：在线执行（如果没有本地工具）

访问在线 SQL 执行工具或使用 SSH 连接到服务器后执行。

---

## SQL 脚本

### 1. 课程套餐表

```sql
CREATE TABLE IF NOT EXISTS `course_package` (
  `id` BIGINT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(255) NOT NULL COMMENT '套餐名称',
  `description` TEXT COMMENT '套餐描述',
  `price` BIGINT NOT NULL COMMENT '价格（分）',
  `discount_price` BIGINT COMMENT '折后价格（分）',
  `discount_type` VARCHAR(50) COMMENT '折扣类型',
  `grade_levels` VARCHAR(500) COMMENT '适用年级',
  `course_count` INT NOT NULL DEFAULT 0 COMMENT '课程数量',
  `status` VARCHAR(50) NOT NULL DEFAULT 'DRAFT' COMMENT '状态',
  `submitted_at` DATETIME COMMENT '提交时间',
  `submitted_by` BIGINT COMMENT '提交人ID',
  `reviewed_at` DATETIME COMMENT '审核时间',
  `reviewed_by` BIGINT COMMENT '审核人ID',
  `review_comment` TEXT COMMENT '审核意见',
  `published_at` DATETIME COMMENT '发布时间',
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='课程套餐表';
```

### 2. 套餐课程关联表

```sql
CREATE TABLE IF NOT EXISTS `course_package_course` (
  `id` BIGINT NOT NULL AUTO_INCREMENT,
  `package_id` BIGINT NOT NULL COMMENT '套餐ID',
  `course_id` BIGINT NOT NULL COMMENT '课程ID',
  `grade_level` VARCHAR(50) COMMENT '适用年级',
  `sort_order` INT NOT NULL DEFAULT 0 COMMENT '排序号',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_package_course` (`package_id`, `course_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='套餐课程关联表';
```

### 3. 租户套餐关联表

```sql
CREATE TABLE IF NOT EXISTS `tenant_package` (
  `id` BIGINT NOT NULL AUTO_INCREMENT,
  `tenant_id` BIGINT NOT NULL COMMENT '租户ID',
  `package_id` BIGINT NOT NULL COMMENT '套餐ID',
  `start_date` DATE NOT NULL COMMENT '开始日期',
  `end_date` DATE NOT NULL COMMENT '结束日期',
  `price_paid` BIGINT NOT NULL DEFAULT 0 COMMENT '实付价格',
  `status` VARCHAR(50) NOT NULL DEFAULT 'ACTIVE' COMMENT '状态',
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_tenant_id` (`tenant_id`),
  KEY `idx_package_id` (`package_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='租户套餐关联表';
```

### 4. 课程环节表

```sql
CREATE TABLE IF NOT EXISTS `course_lesson` (
  `id` BIGINT NOT NULL AUTO_INCREMENT,
  `course_id` BIGINT NOT NULL COMMENT '课程ID',
  `lesson_type` VARCHAR(50) NOT NULL COMMENT '课程类型',
  `name` VARCHAR(255) NOT NULL COMMENT '课程名称',
  `description` TEXT COMMENT '课程描述',
  `duration` INT COMMENT '时长（分钟）',
  `video_path` VARCHAR(500) COMMENT '视频路径',
  `video_name` VARCHAR(255) COMMENT '视频名称',
  `ppt_path` VARCHAR(500) COMMENT 'PPT路径',
  `ppt_name` VARCHAR(255) COMMENT 'PPT名称',
  `pdf_path` VARCHAR(500) COMMENT 'PDF路径',
  `pdf_name` VARCHAR(255) COMMENT 'PDF名称',
  `objectives` TEXT COMMENT '教学目标',
  `preparation` TEXT COMMENT '教学准备',
  `extension` TEXT COMMENT '教学延伸',
  `reflection` TEXT COMMENT '教学反思',
  `assessment_data` TEXT COMMENT '评测数据',
  `use_template` TINYINT(1) DEFAULT 0 COMMENT '是否使用模板',
  `sort_order` INT NOT NULL DEFAULT 0 COMMENT '排序号',
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_course_id` (`course_id`),
  UNIQUE KEY `uk_course_lesson_type` (`course_id`, `lesson_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='课程环节表';
```

### 5. 教学环节表

```sql
CREATE TABLE IF NOT EXISTS `lesson_step` (
  `id` BIGINT NOT NULL AUTO_INCREMENT,
  `lesson_id` BIGINT NOT NULL COMMENT '课程环节ID',
  `name` VARCHAR(255) NOT NULL COMMENT '环节名称',
  `content` TEXT COMMENT '环节内容',
  `duration` INT NOT NULL DEFAULT 5 COMMENT '时长（分钟）',
  `objective` TEXT COMMENT '教学目标',
  `resource_ids` TEXT COMMENT '资源ID列表',
  `sort_order` INT NOT NULL DEFAULT 0 COMMENT '排序号',
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_lesson_id` (`lesson_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='教学环节表';
```

### 6. 环节资源关联表

```sql
CREATE TABLE IF NOT EXISTS `lesson_step_resource` (
  `id` BIGINT NOT NULL AUTO_INCREMENT,
  `step_id` BIGINT NOT NULL COMMENT '环节ID',
  `resource_id` BIGINT NOT NULL COMMENT '资源ID',
  `sort_order` INT NOT NULL DEFAULT 0 COMMENT '排序号',
  PRIMARY KEY (`id`),
  KEY `idx_step_id` (`step_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='环节资源关联表';
```

### 7. 主题字典表

```sql
CREATE TABLE IF NOT EXISTS `theme` (
  `id` BIGINT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(255) NOT NULL COMMENT '主题名称',
  `description` TEXT COMMENT '主题描述',
  `sort_order` INT NOT NULL DEFAULT 0 COMMENT '排序号',
  `status` VARCHAR(50) NOT NULL DEFAULT 'ACTIVE' COMMENT '状态',
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='主题字典表';
```

---

## 验证表创建

执行完成后，运行以下 SQL 验证：

```sql
-- 查看所有表
SHOW TABLES;

-- 查看新创建的表
SELECT TABLE_NAME, TABLE_COMMENT
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'reading_platform'
AND TABLE_NAME IN ('course_package', 'course_package_course', 'tenant_package',
                   'course_lesson', 'lesson_step', 'lesson_step_resource', 'theme');
```

---

## 注意事项

1. **执行前备份**: 建议先备份数据库
2. **字符集**: 所有表使用 utf8mb4 字符集
3. **引擎**: 使用 InnoDB 存储引擎
4. **索引**: 已创建必要的索引以提高查询性能

---

## 下一步

表创建完成后，可以：
1. 启动 Java 后端应用
2. 访问 Swagger 文档测试 API：`http://localhost:8080/swagger-ui.html`
3. 进行功能测试

---

*创建时间: 2026-03-12*
