Files

2.3 KiB

开发数据库 Schema 基线与版本门禁 PRD

  • 功能编号:GOV-007
  • PRD 版本:0.1
  • 状态:approved
  • 日期:2026-08-13

问题

数据库迁移文件只能表达预期变化,不能证明每个版本开始前开发数据库的实际结构,也无法发现手工改表、对象遗漏或环境误连。当前 MySQL 尚未启用,还需要一种不伪造空 Schema 的可审计状态。

目标

  • 每个新应用版本开发前,封存上一已发布版本的开发库完整 Schema。
  • 将环境、数据库名、MySQL 版本、字符集、排序规则和对象范围设置为强制门禁。
  • 生成确定性、可校验、可版本控制且不含数据或凭据的产物。
  • MySQL 未启用时生成可验证的不适用记录。
  • 在 governance:start 前阻断缺失或失效的上一版本基线。

用户流程

  1. 开发者确认上一已发布语义化版本。
  2. 执行 npm run schema:baseline 生成或幂等验证对应目录。
  3. 执行 npm run schema:verify 复核清单、版本、提交和校验值。
  4. 将基线用中文提交推送项目 Gitea。
  5. 执行 governance:start 开始下一版本功能。

非目标

  • 不备份任何业务数据、用户数据或生产数据。
  • 不连接、探测、读取或验证生产数据库。
  • 不替代生产运维备份、数据库恢复演练或迁移框架。
  • 本版本不启动 MySQL,也不对真实数据库执行命令。

风险

  • DEFINER、导出时间和当前自增值会造成不可移植或无意义差异。
  • 参数可覆盖 env 或数据库名会扩大到生产资源的误操作范围。
  • 空 SQL 或可篡改的 N/A 清单会让门禁形式化而不可信。
  • 既有版本目录被覆盖会破坏发布历史。

验收标准

  • 开发库、MySQL 5.7 和字符规则不符合时全部阻断。
  • 导出参数明确只含结构并覆盖表、视图、触发器、例程和事件。
  • 规范化固定样本精确保留业务对象和列自增属性。
  • 真实基线三方 SHA-256 一致;N/A 基线只有清单。
  • 版本、标签提交、对象范围、状态和文件集合都能自动校验。
  • 既有不同内容禁止覆盖,命令行不能切换 production env 或数据库。
  • 治理流程、双 Review、GitNexus、中文提交和 Gitea 推送完成。