← 返回文章列表

一张成绩表,怎样原子进入可信学情

拆解 CSV/XLSX 成绩导入的预检、稳定身份映射、整批事务、幂等与不可变学习证据。

返回 TeachFlow 项目总览

学校里最常见的教学数据不一定来自在线答题,而是一张已经批改好的成绩表。把它“导入系统”看起来只是读 Excel、循环插入数据库;一旦这些分数会改变学生学情,导入就不再是文件功能,而是一次高风险事实写入。

TeachFlow 要解决的核心问题是:一场测验要么完整进入可信证据链,要么一条也不进入。

为什么逐行成功不可接受

假设一张表有 40 名学生、10 道题。前 27 名写入成功,第 28 行因为学生 ID 错误失败。如果系统保留前面的结果,教师会看到一个“部分班级”的平均掌握度,却很难知道缺了谁、哪些题已经重算、重试会不会重复。

所以导入合同必须覆盖整场测验,而不是一行:

成绩表进入可信学情的原子导入链

第一步:文件解析不产生事实

客户端读取 CSV/XLSX,只生成列、样例值与候选映射。教师需要明确:

  • 哪一列是稳定 student_id
  • display_name 仅用于人工核对;
  • 哪些列对应正式 LearningTask;
  • 分数如何转成正确/错误;
  • 测验发生时间与时区;
  • 哪些空值代表缺考,而不是错误。

此时任何预览都不能修改 Current。

第二步:服务端预检使用真实事务

纯前端预检无法发现服务端权限、任务版本、不可变证据冲突或数据库约束。TeachFlow 会在 PostgreSQL 事务中执行与正式提交相同的解析、映射与校验,然后整体 rollback,只返回可复核结果。

PostgreSQL 官方文档对 ROLLBACK 的语义很直接:中止当前事务并丢弃该事务中的全部更新。这里的重点不是数据库术语,而是预检和提交必须共享同一条权威代码路径,否则“预检通过、正式失败”会成为常态。

第三步:确认后整批提交

教师确认后,系统按班级、测验批次、任务和学生生成幂等键,并在一个事务中:

  1. 校验教师仍然拥有班级权限;
  2. 校验任务、知识点与图版本仍然有效;
  3. 写入原始答案、正误、独立性、提示与时间;
  4. 追加 LearningEvent、Attempt、Response 等事实;
  5. 重算个人与班级 Current;
  6. 写入 Neo4j Outbox。

任一学生越权、映射失效或不可变 evidence 冲突,整个批次失败。重试同一批次返回同一结果,不会让一场测验被计算两次。

原子性之外还有语义正确

数据库全成或全败,并不自动保证教学含义正确。最危险的几个问题是:

  • 用姓名作为关联键,遇到重名或改名;
  • 把缺考当作 0 分;
  • 允许客户端自己指定知识点和权重;
  • 把总分列重复映射为多道题;
  • 导入后覆盖原证据,无法追踪纠错;
  • 只更新班级平均值,不保留每条输入。

TeachFlow 因此让 display_name 只参与核对,正式关联始终使用稳定 ID;知识点与权重由服务端从正式任务读取;纠错通过后继事件完成,不覆盖原始导入事实。

与 OneRoster 的关系

1EdTech OneRoster 的 CSV 规范强调批量文件之间的标识引用与依赖,例如 Enrollment 必须引用 class、school 和 user 的 sourcedId。TeachFlow 并没有声明实现完整 OneRoster,但这个标准帮助解释了为什么稳定标识和跨文件依赖不能靠“名字差不多”解决。

当前证据边界

源码与项目记录显示,专项检查覆盖单条和 CSV/XLSX 多题教师评分、预检回滚、整批原子提交、班级授权、Episode 归属、并发幂等和不可变事实。本文固定快照未附带新的隔离 PostgreSQL 执行回执,因此不公布成功率或耗时,也不声称已兼容学校所有 Excel 模板。

照片答卷 OCR 仍是另一条风险更高的链。当前文章只讨论已经结构化、已经批改的表格,不把识别结果直接当作评分事实。

常见问题与设计边界

为什么预检要真的写再回滚,不能只校验 DTO?
因为唯一约束、权限、现有 evidence 冲突和重算路径都在数据库边界。只校验 DTO 证明不了正式事务会成功。

文件有一行错,能否允许跳过继续?
可以设计“明确排除后重新确认”的新批次,但不能默默跳过。教师必须知道最终进入学情的是哪个确定集合。

如何处理老师重复上传?
幂等键绑定班级、测验批次、任务和学生;相同事实安全重放,不同内容冲突并阻止覆盖。

参考资料

结论

成绩表导入的完成标准不是“读出了 400 个格子”,而是教师能够确认一组稳定映射,系统用真实事务证明它可提交,并让整场测验以不可变、幂等、可追溯的方式进入学情。只有这样,一张 Excel 才从办公文件变成可信教学证据。

← 返回文章列表