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