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

146 lines
6.3 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,
course_name VARCHAR(100) NOT NULL COMMENT '课程名称',
micro_lesson_name VARCHAR(100) NOT NULL COMMENT '微课名称',
user_id BIGINT NOT NULL COMMENT '负责人ID',
progress_status INT NOT NULL DEFAULT 0 COMMENT '当前任务进度状态: 0-脚本上传, 1-脚本确认, 2-视频拍摄, 3-后期制作, 4-任务完成',
script_upload_time BIGINT DEFAULT NULL COMMENT '脚本上传时间(时间戳)',
script_confirm_time BIGINT DEFAULT NULL COMMENT '脚本确认时间(时间戳)',
video_capture_time BIGINT DEFAULT NULL COMMENT '视频拍摄时间(时间戳)',
video_confirm_time BIGINT DEFAULT NULL COMMENT '视频确认时间(时间戳)',
finish_time BIGINT DEFAULT NULL COMMENT '任务完成时间(时间戳)',
advise TEXT DEFAULT NULL COMMENT '任务建议或备注',
created_at BIGINT NOT NULL COMMENT '创建时间(时间戳)',
updated_at BIGINT NOT NULL COMMENT '更新时间(时间戳)',
FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE,
INDEX idx_lesson_tasks_user_id (user_id),
INDEX idx_lesson_tasks_progress_status (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: 任务完成
- `script_upload_time`: 脚本上传时间,毫秒级时间戳
- `script_confirm_time`: 脚本确认时间,毫秒级时间戳
- `video_capture_time`: 视频拍摄时间,毫秒级时间戳
- `video_confirm_time`: 视频确认时间,毫秒级时间戳
- `finish_time`: 任务完成时间,毫秒级时间戳
- `advise`: 任务相关的建议或备注,文本字段
- `created_at`: 创建时间,毫秒级时间戳
- `updated_at`: 更新时间,毫秒级时间戳
### 索引
- 主键索引:`id`
- 外键索引:`idx_lesson_tasks_user_id (user_id)`
- 普通索引:`idx_lesson_tasks_progress_status (progress_status)`
## 数据库关系
1. `users.department_id` -> `departments.id`
- 一个部门可以有多个用户
- 一个用户只能属于一个部门
- 使用RESTRICT约束防止删除仍有用户的部门
2. `lesson_tasks.user_id` -> `users.id`
- 一个用户可以负责多个课程任务
- 一个课程任务只能有一个负责人
- 使用CASCADE约束删除用户时自动删除其负责的课程任务
## 注意事项
1. 所有时间戳字段使用BIGINT类型存储毫秒级时间戳
2. 字符编码统一使用utf8mb4支持完整的Unicode字符集
3. 所有表都使用InnoDB引擎支持事务和外键
4. 关键字段都建立了适当的索引以提高查询性能
5. 用户密码在存储前需要进行加密处理
6. 删除用户时会自动删除其关联的课程任务,但不会影响部门数据