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