样例:数据规范
下面是 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。
违反时
结构变更未同步数据字典的,先补字典再合并;删除演练中出现未清理的副本,补进副本清单。