数据规范
后端开发规范管的是代码怎么分层,这一页管的是被这些代码读写的数据:怎么命名、怎么迁移、怎么分级、留存多久、删的时候连哪些副本一起删。数据一旦上线就很难改,命名与迁移纪律是这一类里回报最高的两条。
1这一页管什么
结构、生命周期与分级;查询放在哪里不在这里重复。
- 管数据的结构与生命周期。命名与类型、主键与外键、审计字段、迁移纪律、数据字典、敏感分级、留存与删除、跨存储的一致性。
- 不交由这一页。查询写在数据访问层属后端开发规范;备份与恢复演练属部署运维规范;备份介质也要删则是两页共同的责任,本页写明「删除时要列出副本清单」。
- 两种落法。命名、审计字段、迁移纪律写进规则;「按规范做一次数据变更」写成技能。
对应的课程知识点:数据建模与规范化、迁移即代码(migrations as code)与向前兼容、软删除与数据留存、数据分级与最小化收集、跨存储一致性与补偿。在包含向量库与对象存储的项目里,「删干净」比「存进去」难得多,这是本页最容易被忽略的部分。
2规范条目
九条,按「建 → 改 → 分级 → 删」的顺序排列。
| 条目 | 要写清什么,为什么这样规定 | 怎么检查 |
|---|---|---|
| 命名与类型 | 表名与字段名的单复数、时态统一;时间统一用 UTC 存储;状态用枚举并写清取值含义。命名不一致会让查询语义随作者变化 | 数据字典与实现比对;出现两种命名风格即判缺陷 |
| 主键与外键 | 主键类型统一;外键与级联行为写清;跨资源引用必须带归属字段。缺归属字段时,逐资源授权判定就无处落地 | 抽查涉及资源的表,是否都能一次取到归属 |
| 审计字段 | 创建时间、更新时间、创建人必填;变更留痕只增不改。没有审计字段就无法回答「这条记录谁改的」 | 抽查若干表是否齐备;缺少即补齐后再上线 |
| 迁移纪律 | 迁移文件只增不改;语句条件化可重跑;每次迁移写明回滚动作。上线后再改迁移文件会让环境之间不可比 | 迁移脚本审查;执行一次回滚验证可逆 |
| 数据字典 | 表与字段的含义只写一处,入库并随结构变更更新。含义分散时,同一个字段在不同模块有不同解释 | 变更说明与数据字典对照 |
| 敏感数据分级 | 按公开 / 内部 / 敏感 / 个人信息分级,敏感字段清单与脱敏规则集中定义。分散定义的结果总是有遗漏 | 抽查日志与响应,含敏感原值即判失败 |
| 留存与删除 | 写明每类数据的保留期与到期清理方式;收到删除请求时列出全部副本(业务库、向量库、对象存储、缓存、备份) | 执行一次删除演练,逐项核对副本清单 |
| 跨存储一致性 | 同一份数据存在多处时,写明写入顺序与删除顺序,以及失败后的补偿动作 | 在删除中途制造失败,检查是否有残留与重试 |
| 测试数据 | 生产数据不进测试环境;需要样本时脱敏后导出。带真实数据调试本身就是一次泄露 | 抽查测试环境数据;含未脱敏的生产记录即判事故 |
3本课先写到哪
下列五件完成,数据层就具备可回滚与可清理的能力。
- 最小集合五件。命名与审计字段、迁移只增且可回滚、数据字典、敏感分级清单、留存期。
- 写清副本清单。把一处数据存在哪几个地方列成表,删除时按表逐项执行。
- 先做一次删除演练。建一条数据、删除、再检查各处副本是否清空。
- 把敏感分级接进日志与响应。与安全开发规范里的脱敏规则引用同一份定义。
这类规范的价值在事后才显现:命名与迁移纪律在第一次上线时几乎看不出差别,而在第六次改结构、或第一次收到删除请求时,差别是「一小时」与「一周」。