299 lines
8.8 KiB
Markdown
299 lines
8.8 KiB
Markdown
# 学生换班级记录表设计说明
|
||
|
||
## 📋 文档说明
|
||
|
||
**版本**: 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
|
||
**联系方式**: 项目技术团队
|