Files
student_manage_system/docs/02-business-design.md
T

8.0 KiB
Raw Blame History

学生管理系统 — 业务设计文档

1. 业务背景

本系统服务于教育培训机构的日常教务运营,解决以下核心业务问题:

  • 学生信息管理:统一管理学员档案,支持按班级、顾问老师查询
  • 教学过程跟踪:记录各阶段考核成绩,分析学习效果
  • 就业数据沉淀:追踪毕业生去向,统计就业率和薪资水平
  • 班级师资配置:管理班主任、授课老师、助教老师的协作关系

2. 用户角色

角色 说明 主要操作
教务管理员 系统最高权限,负责全局数据维护 全部 CRUD、统计查看
班主任 负责班级管理 查看/编辑本班学生、班级信息
授课老师 负责成绩录入 录入/修改学生成绩
顾问老师 负责学生职业规划 查看所带学生信息、就业状态
就业专员 负责就业数据维护 录入/更新就业记录

当前阶段为内部工具,暂未实现角色权限控制;V2.0 规划接入 OAuth2 + RBAC。


3. 业务流程

3.1 学生入班流程

[创建教师] → [创建班级并分配师资] → [录入学生信息并绑定班级]
     │                  │                          │
     └──── 教师编号唯一 ──┘                          └── 学号唯一,班级必填

规则:

  • 新建学生时,class_id 必须指向已存在的未删除班级
  • advisor_id(顾问老师)可选,必须指向有效教师
  • 学生编号(num)全局唯一

3.2 成绩录入流程

[选择学生] → [填写考核序次(num)] → [录入分数]
                │
                └── 同一学生同一考核序次不可重复录入(业务约束)

规则:

  • 成绩 score 保留两位小数(DECIMAL(10,2))
  • 考核序次(如"第一次考核"、"期中")由业务方定义,系统不做枚举约束
  • 支持按学生 ID 或考核序次模糊查询

3.3 就业登记流程

[开放就业通道] → [登记就业公司信息] → [下发 Offer] → [记录薪资]
     │                   │                    │
  employment_open    employment_company   offer_received
    _time            _time                time

规则:

  • 一个学生只能有一条有效就业记录(sid 唯一约束)
  • employment_open_time 和 offer_recived_time 可为空(流程进行中)
  • 平均签约周期 = offer_recived_time - employment_open_time(天数)

3.4 统计查询流程

[请求统计数据] → [按班级/考核序次过滤] → [聚合计算] → [返回统计结果]
统计类型 维度 指标
班级人数统计 按班级 总人数、男生数、女生数
成绩统计 按考核序次+班级 平均分、最高分、最低分、参考人数
就业统计 按班级 已就业人数、就业率、平均薪资、平均签约周期

4. 核心业务实体关系

┌──────────┐     1:N     ┌──────────┐     1:N     ┌──────────┐
│  Teacher │◄───────────►│  Class   │◄───────────►│ Student  │
│  教师     │ 班主任/授课  │  班级     │  所属班级    │  学生     │
│          │  助教老师    │          │             │          │
└────┬─────┘              └────┬─────┘             └────┬─────┘
     │                         │                       │
     │ 1:N                     │ 1:1                   │ 1:N
     ▼                         ▼                       ▼
┌──────────┐              ┌──────────┐           ┌──────────┐
│  Score   │              │Employment│◄──────────►│ Student  │
│  成绩     │              │  就业     │   一对一    │          │
└──────────┘              └──────────┘           └──────────┘

关联说明

  • Teacher ↔ Class:一对多(一个老师可担任多个班级的班主任/授课老师/助教)
  • Class ↔ Student:一对多(一个班级有多个学生)
  • Student ↔ Score:一对多(一个学生有多次考核成绩)
  • Student ↔ Employment:一对一(一个学生只有一条有效就业记录)
  • Teacher ↔ Student:多对一(一个顾问老师带多个学生)

5. 业务规则与约束

5.1 唯一性约束

字段 表 规则
num teachers 教师编号全局唯一
num classes 班级编号全局唯一
num students 学生编号全局唯一
(sid, num) scores 同一学生同一考核序次只允许一条记录
sid employment 一名学生只允许一条就业记录

5.2 外键约束(业务层校验)

字段 引用表 级联策略
students.class_id classes.id 删除班级时限制(restrict),更新级联
students.advisor_id teachers.id 删除教师时置空,更新级联
classes.head_teacher_id teachers.id 同左
scores.sid students.id 删除学生时级联删除成绩
employment.sid students.id 删除学生时级联删除就业记录

5.3 软删除规则

  • 所有表均支持软删除(is_deleted = true + delete_time 记录时间)
  • 所有查询默认过滤 is_deleted = false
  • 软删除不影响关联数据(成绩/就业随学生级联删除)

6. 统计业务逻辑详细说明

6.1 班级人数统计(GET /api/stats/classes)

SELECT class_id, class_name, COUNT(*) as total,
       SUM(CASE WHEN sex=1 THEN 1 ELSE 0 END) as male_count,
       SUM(CASE WHEN sex=2 THEN 1 ELSE 0 END) as female_count
FROM students s JOIN classes c ON s.class_id = c.id
WHERE s.is_deleted=0 AND c.is_deleted=0
GROUP BY s.class_id, c.name

6.2 成绩统计(GET /api/stats/scores?class_id=&score_num=)

SELECT score_num, class_id, AVG(score), MAX(score), MIN(score), COUNT(*)
FROM scores sc JOIN students s ON sc.sid = s.id
WHERE s.is_deleted=0 AND sc.is_deleted=0
GROUP BY score_num, class_id
[可选过滤 class_id / score_num]

6.3 就业统计(GET /api/stats/employment?class_id=)

SELECT e.class_id, c.name,
       COUNT(e.id) as employed_count,
       COUNT(s.id) as total_count,
       AVG(e.employment_salary) as avg_salary
FROM employment e
JOIN classes c ON e.class_id = c.id
JOIN students s ON e.sid = s.id
WHERE e.is_deleted=0 AND s.is_deleted=0 AND c.is_deleted=0
GROUP BY e.class_id, c.name
[可选过滤 class_id]

-- 额外计算:平均签约周期(天数)
AVG(JULIANDAY(offer_recived_time) - JULIANDAY(employment_open_time))
WHERE employment_open_time IS NOT NULL AND offer_recived_time IS NOT NULL

7. 数据字典(待 V2.0 实现)

以下字段当前以字符串或整数存储,建议 V2.0 升级为字典表管理:

字段 当前存储 建议字典类型 候选值
sex TINYINT (0/1/2) dict_type=sex 0:未知, 1:男, 2:女
education VARCHAR dict_type=education bachelor:本科, master:硕士, phd:博士
coach_area VARCHAR dict_type=coach_area app:应用, project:项目, algorithm:算法
college VARCHAR dict_type=college 院校代码 → 名称映射
specialty VARCHAR dict_type=specialty 专业代码 → 名称映射

8. 分期业务规划

阶段 业务目标 功能范围
V1.0(当前) 基础数据管理 五模块 CRUD + 三类统计
V2.0 数据治理与权限 字典表、用户认证、部门/顾问模块、数据源配置
V3.0 智能分析 AI 知识库接入、自然语言查询、预测分析
V4.0 多租户 SaaS 租户隔离、多机构支持、API 开放平台