kindergarten_java/docs/数据库迁移指南.md

227 lines
7.4 KiB
Markdown
Raw Normal View History

# 数据库迁移指南
## 数据库配置
**服务器地址**: 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*