样例:数据规范
公开教程 · 无需登录

样例:数据规范

下面是 CampusClaw 项目《数据规范 · CampusClaw》的原文,逐条列出,可直接照抄。

适用:backend/internal/db(关系库)、knowledge(切片与向量)、uploads/(对象存储)
被谁读到:规则文件 .cursor/rules/data.mdc;技能「按规范做一次数据变更」

1. 命名与类型

  • 表名小写复数:materials、chunks、sessions、messages、homeworks、submissions。
  • 时间统一 UTC 存储,字段后缀 _at;状态用枚举并写清取值(pending / processing / done / failed)。
  • 本项目的核心字段 class_id:所有业务表都带,且非空。它是逐资源授权判定唯一可依赖的字段。

2. 审计字段

每张业务表带 created_at、updated_at、created_by;批改与成绩类改动只增不改(submissions 的补交、overrides 的改分都新增行)。

3. 迁移纪律

  • 迁移文件只增不改,路径 backend/internal/db/migrations/,文件名带时间戳。
  • 语句条件化可重跑(CREATE TABLE IF NOT EXISTS 形式);每次迁移在文件头写回滚动作。
  • 结构变更先加后删:加字段 → 双写 → 切读 → 删旧字段。

4. 数据字典

docs/data-dictionary.md 是唯一处:每张表的用途、每个字段的含义与取值。结构变更必须同步该文件;含义分散时,同一个字段在不同模块会出现不同解释。

5. 敏感数据分级

级别例子处理
公开帮助文档、错误码说明可直接返回
内部班级名称、资料标题本班可见
敏感资料正文、切片内容不进日志,不进响应体除非接口本就是取正文
个人信息学生提问记录、会话历史、账号与口令不进日志;保留期一学期;导出需脱敏

口令用 bcrypt 加盐存储;预置账号口令取自 .env 的 SEED_*_PASSWORD。

6. 留存与删除

  • 提问与会话记录保留一学期,到期清理。
  • 收到删除请求时按副本清单逐项执行:业务库记录 → 向量库切片 → uploads/ 文件 → 缓存 → 备份介质。
  • 每学期执行一次删除演练,核对清单逐项,记录用时。

7. 跨存储一致性

写入顺序:先落业务库与文件,再建切片与向量;任一步失败留下一条待处理记录,由重跑任务补偿。删除顺序相反:先删业务记录并标记,再异步清理切片与文件。

判据:在删除中途制造一次失败,检查是否有残留以及是否能被重跑任务收敛。

8. 测试数据

生产数据不进测试环境。需要样本时脱敏后导出;测试用 A / B 两个班的预置数据,口令来自 .env 的 SEED_*_PASSWORD。

违反时

结构变更未同步数据字典的,先补字典再合并;删除演练中出现未清理的副本,补进副本清单。