fix:固定时间戳单位为秒

This commit is contained in:
huertian
2025-01-03 14:09:53 +08:00
parent f990f6b7a3
commit 6dd845cdd7
8 changed files with 303 additions and 267 deletions

View File

@ -15,7 +15,8 @@ CREATE TABLE departments (
```
### 字段说明
- `id`: 部门ID自增主键
- `id`: 部门 ID自增主键
- `name`: 部门名称,不可为空
- `description`: 部门描述,可为空
- `created_at`: 创建时间,毫秒级时间戳
@ -45,11 +46,12 @@ CREATE TABLE users (
```
### 字段说明
- `id`: 用户ID自增主键
- `id`: 用户 ID自增主键
- `username`: 用户名,不可为空
- `email`: 邮箱地址,不可为空,唯一索引
- `password`: 密码(加密存储),不可为空
- `department_id`: 所属部门ID外键关联departments表
- `department_id`: 所属部门 ID外键关联 departments
- `roles`: 用户角色,整数枚举:
- 1: 教师
- 2: 普通管理员
@ -60,8 +62,8 @@ CREATE TABLE users (
- 2: 课程购买方项目负责人
- 3: 课程制作方沟通联络人
- 4: 系统制作方项目负责人
- `avatar`: 用户头像URL可为空
- `creator_id`: 创建该用户的管理员ID
- `avatar`: 用户头像 URL可为空
- `creator_id`: 创建该用户的管理员 ID
- `status`: 用户状态:
- 1: 正常
- 0: 禁用
@ -69,6 +71,7 @@ CREATE TABLE users (
- `updated_at`: 更新时间,毫秒级时间戳
### 索引
- 主键索引:`id`
- 外键索引:`idx_users_department_id (department_id)`
- 唯一索引:`email`
@ -78,68 +81,114 @@ CREATE TABLE users (
存储课程制作任务的信息和进度。
```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 ='课程任务表';
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自增主键
- `id`: 任务 ID自增主键
- `course_name`: 课程名称,不可为空
- `micro_lesson_name`: 微课名称,不可为空
- `user_id`: 负责人ID外键关联users表
- `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`: 更新时间,毫秒级时间戳
- 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_lesson_tasks_user_id (user_id)`
- 普通索引:`idx_lesson_tasks_progress_status (progress_status)`
- 外键索引:`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约束防止删除仍有用户的部门
- 使用 RESTRICT 约束,防止删除仍有用户的部门
2. `lesson_tasks.user_id` -> `users.id`
- 一个用户可以负责多个课程任务
- 一个课程任务只能有一个负责人
- 使用CASCADE约束删除用户时自动删除其负责的课程任务
- 使用 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引擎支持事务和外键
1. 所有时间戳字段使用 BIGINT 类型,存储毫秒级时间戳
2. 字符编码统一使用 utf8mb4支持完整的 Unicode 字符集
3. 所有表都使用 InnoDB 引擎,支持事务和外键
4. 关键字段都建立了适当的索引以提高查询性能
5. 用户密码在存储前需要进行加密处理
6. 删除用户时会自动删除其关联的课程任务,但不会影响部门数据