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

6.3 KiB
Raw Blame History

数据库设计文档

1. 部门表 (departments)

用于存储组织的部门信息。

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)

存储系统用户信息,包括教师、管理员等角色。

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)

存储课程制作任务的信息和进度。

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. 删除用户时会自动删除其关联的课程任务,但不会影响部门数据