ppms-uni-vue3-huertian/数据库.md

195 lines
8.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 数据库设计文档
## 1. 部门表 (departments)
用于存储组织的部门信息。
```sql
CREATE TABLE departments (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL COMMENT '部门名称',
description TEXT DEFAULT NULL COMMENT '部门描述',
created_at BIGINT NOT NULL COMMENT '创建时间(时间戳)',
updated_at BIGINT NOT NULL COMMENT '更新时间(时间戳)'
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT ='部门表';
```
### 字段说明
- `id`: 部门 ID自增主键
- `name`: 部门名称,不可为空
- `description`: 部门描述,可为空
- `created_at`: 创建时间,毫秒级时间戳
- `updated_at`: 更新时间,毫秒级时间戳
## 2. 用户表 (users)
存储系统用户信息,包括教师、管理员等角色。
```sql
CREATE TABLE users (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL COMMENT '用户名',
email VARCHAR(100) NOT NULL UNIQUE COMMENT '邮箱',
password VARCHAR(100) NOT NULL COMMENT '密码',
department_id BIGINT NOT NULL COMMENT '所属部门',
roles INT NOT NULL COMMENT '角色: 1-校方教师, 2-公司课程顾问, 3-校方项目负责人, 4-公司系统管理员',
jobs INT NOT NULL COMMENT '岗位: 1-课程制作教师, 2-课程审核人员, 3-校方项目负责人, 4-公司系统管理员',
avatar VARCHAR(255) DEFAULT NULL COMMENT '头像',
creator_id BIGINT NOT NULL DEFAULT 1 COMMENT '创建用户的管理员ID',
status INT NOT NULL DEFAULT 1 COMMENT '用户状态: 1-正常, 0-禁用',
created_at BIGINT NOT NULL COMMENT '创建时间(时间戳)',
updated_at BIGINT NOT NULL COMMENT '更新时间(时间戳)',
FOREIGN KEY (department_id) REFERENCES departments (id) ON DELETE RESTRICT,
INDEX idx_users_department_id (department_id)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT ='用户表';
```
### 字段说明
- `id`: 用户 ID自增主键
- `username`: 用户名,不可为空
- `email`: 邮箱地址,不可为空,唯一索引
- `password`: 密码(加密存储),不可为空
- `department_id`: 所属部门 ID外键关联 departments 表
- `roles`: 用户角色,整数枚举:
- 1: 教师
- 2: 普通管理员
- 3: 沟通联络人
- 4: 系统管理员
- `jobs`: 用户岗位,整数枚举:
- 1: 课程制作教师
- 2: 课程购买方项目负责人
- 3: 课程制作方沟通联络人
- 4: 系统制作方项目负责人
- `avatar`: 用户头像 URL可为空
- `creator_id`: 创建该用户的管理员 ID
- `status`: 用户状态:
- 1: 正常
- 0: 禁用
- `created_at`: 创建时间,毫秒级时间戳
- `updated_at`: 更新时间,毫秒级时间戳
### 索引
- 主键索引:`id`
- 外键索引:`idx_users_department_id (department_id)`
- 唯一索引:`email`
## 3. 课程任务表 (lesson_tasks)
存储课程制作任务的信息和进度。
```sql
CREATE TABLE lesson_tasks
(
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID系统自动生成的唯一标识',
course_name VARCHAR(100) NOT NULL COMMENT '所属课程名称,标识任务所属的主课程',
micro_lesson_name VARCHAR(100) NOT NULL COMMENT '具体微课名称,标识任务所属的具体微课单元',
user_id BIGINT NOT NULL COMMENT '任务负责人ID关联users表的主键id',
progress_status INT NOT NULL DEFAULT 0 COMMENT '任务进度状态:
0-未开始:任务创建后的初始状态
1-脚本制作:正在编写课程脚本
2-脚本审核:脚本提交审核阶段
3-脚本确认:脚本审核通过确认
4-视频拍摄与制作:进行视频录制和后期制作
5-视频确认:最终视频审核确认',
script_create_time BIGINT DEFAULT NULL COMMENT '脚本开始制作的时间戳状态1时记录',
script_review_time BIGINT DEFAULT NULL COMMENT '脚本提交审核的时间戳状态2时记录',
script_confirm_time BIGINT DEFAULT NULL COMMENT '脚本审核通过的时间戳状态3时记录',
video_create_time BIGINT DEFAULT NULL COMMENT '开始视频制作的时间戳状态4时记录',
video_confirm_time BIGINT DEFAULT NULL COMMENT '视频审核通过的时间戳状态5时记录',
finish_time BIGINT DEFAULT NULL COMMENT '整个任务完成的时间戳,最终确认后记录',
advise TEXT DEFAULT NULL COMMENT '任务相关的建议、修改意见或其他重要备注信息',
created_at BIGINT NOT NULL COMMENT '记录创建的时间戳,系统自动生成',
updated_at BIGINT NOT NULL COMMENT '记录最后更新的时间戳,系统自动更新',
-- 外键约束确保user_id关联到users表的有效用户
CONSTRAINT fk_lesson_tasks_user FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE ON UPDATE CASCADE,
-- 索引设计:
-- 1. 用户ID索引用于快速查找特定用户的所有任务
INDEX idx_user_id (user_id),
-- 2. 进度状态索引:用于按状态筛选和统计任务
INDEX idx_progress_status (progress_status),
-- 3. 课程名称索引:用于按课程分组和查询
INDEX idx_course_name (course_name),
-- 4. 复合索引:用于同时按用户和状态查询
INDEX idx_user_progress (user_id, progress_status)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COMMENT='课程任务管理表:记录微课制作的完整流程,包括脚本编写、审核、视频制作等各个环节的进度和时间节点';
```
### 字段说明
- `id`: 任务 ID自增主键
- `course_name`: 课程名称,不可为空
- `micro_lesson_name`: 微课名称,不可为空
- `user_id`: 负责人 ID外键关联 users 表
- `progress_status`: 任务进度状态:
- 0: 未开始
- 1: 脚本制作
- 2: 脚本审核
- 3: 脚本确认
- 4: 视频拍摄与制作
- 5: 视频确认
- `script_create_time`: 脚本开始制作的时间戳,状态 1 时记录
- `script_review_time`: 脚本提交审核的时间戳,状态 2 时记录
- `script_confirm_time`: 脚本审核通过的时间戳,状态 3 时记录
- `video_create_time`: 开始视频制作的时间戳,状态 4 时记录
- `video_confirm_time`: 视频审核通过的时间戳,状态 5 时记录
- `finish_time`: 整个任务完成的时间戳,最终确认后记录
- `advise`: 任务相关的建议、修改意见或其他重要备注信息
- `created_at`: 记录创建的时间戳,系统自动生成
- `updated_at`: 记录最后更新的时间戳,系统自动更新
### 索引
- 主键索引:`id`
- 外键索引:`idx_user_id (user_id)`
- 普通索引:`idx_progress_status (progress_status)`
- 普通索引:`idx_course_name (course_name)`
- 复合索引:`idx_user_progress (user_id, progress_status)`
## 数据库关系
1. `users.department_id` -> `departments.id`
- 一个部门可以有多个用户
- 一个用户只能属于一个部门
- 使用 RESTRICT 约束,防止删除仍有用户的部门
2. `lesson_tasks.user_id` -> `users.id`
- 一个用户可以负责多个课程任务
- 一个课程任务只能有一个负责人
- 使用 CASCADE 约束,删除用户时自动删除其负责的课程任务
3. `lesson_tasks``users` 表关系:
- 一对多关系一个用户users可以负责多个课程任务lesson_tasks
- 通过 `user_id` 外键关联,确保任务负责人的有效性
- 使用 CASCADE 级联删除:当用户被删除时,相关任务也会被自动删除
- 使用 CASCADE 级联更新:当用户 ID 更新时,相关任务的 user_id 也会自动更新
4. 索引说明:
- `idx_user_id`: 优化按负责人查询任务的性能
- `idx_progress_status`: 优化按任务状态筛选和统计的性能
- `idx_course_name`: 优化按课程名称查询和分组的性能
- `idx_user_progress`: 优化同时按用户和任务状态查询的性能,适用于查看特定用户的特定状态任务
5. 时间节点追踪:
- 系统通过各个时间戳字段script_create_time, script_review_time 等)完整记录任务的每个阶段
- 可以通过这些时间戳计算各阶段的耗时,用于任务进度分析和效率优化
## 注意事项
1. 所有时间戳字段使用 BIGINT 类型,存储毫秒级时间戳
2. 字符编码统一使用 utf8mb4支持完整的 Unicode 字符集
3. 所有表都使用 InnoDB 引擎,支持事务和外键
4. 关键字段都建立了适当的索引以提高查询性能
5. 用户密码在存储前需要进行加密处理
6. 删除用户时会自动删除其关联的课程任务,但不会影响部门数据