Files
hzdyjs/学生换班级/学生换班级记录表设计说明.md
T
2025-12-25 18:01:27 +08:00

299 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.
# 学生换班级记录表设计说明
## 📋 文档说明
**版本**: v1.0.0
**制定时间**: 2025-01-25
**适用范围**: 学生换班级业务模块
**重要性**: ⚠️ **核心业务表** - 记录所有学生换班级操作的历史数据
---
## 🎯 设计目标
### 1. 业务需求
- **记录完整历史**: 记录学生换班级的完整过程和历史数据
- **支持审批流程**: 包含换班级的申请、审批、执行全流程
- **数据追溯**: 提供完整的换班级操作审计和追溯能力
- **业务统计**: 支持换班级数据的统计分析和报表生成
### 2. 技术要求
- **数据完整性**: 遵循项目数据库设计规范
- **性能优化**: 合理的索引设计,支持高效查询
- **扩展性**: 预留扩展字段,支持未来功能需求
- **安全性**: 多租户隔离,完整的审计追踪
---
## 🗄️ 表结构设计
### 表名:`xg_student_class_change`
### 字段分类说明
#### 🔴 强制基础字段(必须)
| 字段名 | 类型 | 默认值 | 说明 |
|--------|------|--------|------|
| `id` | bigint(20) | - | 主键ID(雪花ID) |
| `tenant_id` | varchar(20) | '000000' | 租户编号 |
| `create_dept` | bigint(20) | NULL | 创建部门 |
| `create_by` | bigint(20) | NULL | 创建者 |
| `create_time` | datetime | NULL | 创建时间 |
| `update_by` | bigint(20) | NULL | 更新者 |
| `update_time` | datetime | NULL | 更新时间 |
| `deleted` | tinyint(1) | 0 | 删除标志(0存在 1删除) |
#### 👤 学生基本信息
| 字段名 | 类型 | 默认值 | 说明 |
|--------|------|--------|------|
| `student_id` | bigint(20) | - | 学生ID,关联xg_student_msg.id |
| `student_no` | varchar(32) | - | 学号 |
| `student_name` | varchar(50) | - | 学生姓名 |
#### 📚 原班级信息
| 字段名 | 类型 | 默认值 | 说明 |
|--------|------|--------|------|
| `original_college_id` | bigint(20) | NULL | 原学院ID,关联sys_dept.dept_id |
| `original_college_name` | varchar(100) | NULL | 原学院名称 |
| `original_major_id` | bigint(20) | NULL | 原专业ID,关联xg_major_msg.id |
| `original_major_name` | varchar(100) | NULL | 原专业名称 |
| `original_class_id` | bigint(20) | NULL | 原班级ID,关联xg_class_msg.id |
| `original_class_code` | varchar(32) | NULL | 原班级代码 |
| `original_class_name` | varchar(100) | NULL | 原班级名称 |
#### 📚 新班级信息
| 字段名 | 类型 | 默认值 | 说明 |
|--------|------|--------|------|
| `new_college_id` | bigint(20) | NULL | 新学院ID,关联sys_dept.dept_id |
| `new_college_name` | varchar(100) | NULL | 新学院名称 |
| `new_major_id` | bigint(20) | NULL | 新专业ID,关联xg_major_msg.id |
| `new_major_name` | varchar(100) | NULL | 新专业名称 |
| `new_class_id` | bigint(20) | NULL | 新班级ID,关联xg_class_msg.id |
| `new_class_code` | varchar(32) | NULL | 新班级代码 |
| `new_class_name` | varchar(100) | NULL | 新班级名称 |
#### 🔄 换班级业务信息
| 字段名 | 类型 | 默认值 | 说明 |
|--------|------|--------|------|
| `change_reason` | varchar(500) | NULL | 换班级原因 |
| `change_type` | char(1) | '1' | 换班级类型:1-主动申请,2-学校调整,3-专业调整,4-其他 |
| `change_time` | datetime | NULL | 换班级时间 |
| `effective_time` | datetime | NULL | 生效时间 |
| `status` | char(1) | '0' | 处理状态:0-未处理,1-已处理 |
#### ✅ 审批流程信息
| 字段名 | 类型 | 默认值 | 说明 |
|--------|------|--------|------|
| `approval_status` | char(1) | '0' | 审批状态:0-待审批,1-审批通过,2-审批拒绝,3-已撤销 |
| `approval_by` | bigint(20) | NULL | 审批人ID |
| `approval_time` | datetime | NULL | 审批时间 |
| `approval_remarks` | varchar(500) | NULL | 审批备注 |
#### 📎 附件信息
| 字段名 | 类型 | 默认值 | 说明 |
|--------|------|--------|------|
| `attachment_ids` | text | NULL | 附件文件ID(逗号分隔) |
#### 📝 扩展字段
| 字段名 | 类型 | 默认值 | 说明 |
|--------|------|--------|------|
| `remark` | varchar(500) | NULL | 备注 |
---
## 🔍 索引设计
### 基础索引(必须)
```sql
KEY `idx_tenant_id` (`tenant_id`),
KEY `idx_deleted` (`deleted`),
KEY `idx_create_time` (`create_time`),
KEY `idx_tenant_deleted` (`tenant_id`, `deleted`)
```
### 业务索引
```sql
KEY `idx_student_id` (`student_id`),
KEY `idx_student_no` (`student_no`),
KEY `idx_original_class_id` (`original_class_id`),
KEY `idx_new_class_id` (`new_class_id`),
KEY `idx_change_time` (`change_time`),
KEY `idx_effective_time` (`effective_time`),
KEY `idx_approval_status` (`approval_status`)
```
### 唯一约束
```sql
UNIQUE KEY `uk_student_change_time` (`student_id`, `change_time`, `tenant_id`, `deleted`)
```
---
## 🔄 业务流程
### 1. 换班级申请流程
```
学生申请 → 提交申请 → 管理员处理 → 执行换班级
```
### 2. 数据状态流转
```
未处理(0) → 已处理(1) → 执行换班级 → 生效
```
### 3. 换班级类型说明
| 类型代码 | 类型名称 | 说明 |
|----------|----------|------|
| 1 | 主动申请 | 学生主动提出换班级申请 |
| 2 | 学校调整 | 学校根据教学需要调整班级 |
| 3 | 专业调整 | 学生转专业导致班级变化 |
| 4 | 其他 | 其他特殊情况 |
---
## 📊 数据关联关系
### 关联表说明
- **xg_student_msg**: 学生信息表(通过student_id关联)
- **xg_class_msg**: 班级信息表(通过original_class_id、new_class_id关联)
- **xg_major_msg**: 专业信息表(通过original_major_id、new_major_id关联)
- **sys_dept**: 部门信息表(通过original_college_id、new_college_id关联)
- **sys_user**: 用户信息表(通过create_by、update_by、approval_by关联)
### 注意事项
⚠️ **不使用数据库外键约束**:所有关联关系通过应用层逻辑维护
---
## 📈 统计分析支持
### 支持的统计维度
1. **按时间统计**: 换班级数量趋势分析
2. **按原因统计**: 换班级原因分布统计
3. **按班级统计**: 各班级换班级情况统计
4. **按审批状态**: 换班级申请处理情况统计
5. **按操作人**: 换班级操作人员工作量统计
### 示例统计SQL
```sql
-- 按月份统计换班级数量
SELECT
DATE_FORMAT(change_time, '%Y-%m') AS month,
COUNT(*) AS change_count
FROM xg_student_class_change
WHERE deleted = 0 AND approval_status = '1'
GROUP BY DATE_FORMAT(change_time, '%Y-%m')
ORDER BY month;
-- 按原因统计换班级分布
SELECT
change_type,
COUNT(*) AS count
FROM xg_student_class_change
WHERE deleted = 0 AND approval_status = '1'
GROUP BY change_type;
```
---
## 🔒 安全考虑
### 数据安全
1. **多租户隔离**: 通过tenant_id实现数据隔离
2. **权限控制**: 基于角色的数据访问控制
3. **操作审计**: 完整的操作日志记录
4. **数据加密**: 敏感信息加密存储
### 业务安全
1. **审批流程**: 多级审批确保操作合规
2. **数据校验**: 换班级前进行业务规则校验
3. **操作限制**: 防止重复换班级和无效操作
4. **回滚机制**: 支持换班级操作的回滚
---
## 🚀 使用说明
### 数据插入规范
```sql
INSERT INTO xg_student_class_change (
id, tenant_id, create_by, create_time,
student_id, student_no, student_name,
original_class_id, original_class_name,
new_class_id, new_class_name,
change_reason, change_type, change_time,
approval_status
) VALUES (
雪花ID, '000000', 操作人ID, NOW(),
学生ID, '学号', '学生姓名',
原班级ID, '原班级名称',
新班级ID, '新班级名称',
'换班级原因', '1', NOW(),
'0' -- 待审批状态
);
```
### 查询优化建议
1. **分页查询**: 大数据量时必须分页
2. **索引使用**: 充分利用业务索引提升查询性能
3. **关联查询**: 注意避免复杂的多表关联查询
4. **缓存策略**: 对常用数据进行适当缓存
---
## 📞 维护说明
### 定期维护任务
1. **数据清理**: 定期清理已删除的历史数据
2. **索引优化**: 定期检查和优化索引性能
3. **统计更新**: 定期更新统计数据
4. **备份策略**: 定期备份重要数据
### 扩展规划
1. **字段扩展**: 预留扩展字段用于未来需求
2. **流程优化**: 支持更复杂的审批流程
3. **自动化**: 支持自动换班级处理
4. **集成**: 与教务系统深度集成
---
## ⚠️ 重要提醒
1. **数据一致性**: 换班级操作必须确保数据的一致性
2. **业务规则**: 严格遵守学校的换班级管理规定
3. **审批流程**: 必须经过完整的审批流程
4. **文档同步**: 代码变更必须同步更新相关文档
5. **测试验证**: 新功能必须经过充分的测试验证
---
**最后更新**: 2025-01-25
**维护人员**: AI Assistant
**联系方式**: 项目技术团队