用途:把 DBML 作为数据库结构的标准、人类与 AI 均可读表示。凡是任务涉及数据库结构或数据库文档,都使用该技能,规范文件为 db/schema.dbml。
适用时机:数据库文档、DB schema 文档、ERD 或实体关系文档、表/列/关系/外键/索引文档,SQL、迁移、ORM 模型或数据库元数据的文档,审查数据库文档是否与迁移或实际 schema 一致,修复 schema 漂移或 DBML 漂移导致的 CI 失败,以及新增或修改结构性数据库变更时。结构性变更包括新增或修改迁移,新增/改名/修改/删除表或列,列类型、可空性、默认值、生成值、注释变化,主键、外键、唯一约束、检查、索引、枚举增删改,以及联结表、继承表、审计表、查找表变化。
核心规则:凡涉及结构性数据库变更,必须在同一工作单元内更新 db/schema.dbml,不能只改迁移、ORM 元数据或 SQL 而留下文档漂移。若仓库其他格式的 schema 文档存在且用户未明确要求保留,应迁移或合并到 db/schema.dbml;Mermaid 图、Prisma schema、Markdown 表格、ORM 元数据或散文摘要只作辅助说明,不作为规范文档。
工作流程:先检查仓库现有数据库真实来源,确定有效结构 schema,创建或更新 db/schema.dbml;把行为需求保留在 specs/features/;有验证命令时运行;若漂移检查失败,修实际差异而非绕过。schema 来源可包括迁移、实体映射、SQL 迁移文件、ORM 模型、数据库转储或快照、现有 DBML、CI 漂移脚本;优先采用生成或迁移可证明的事实,无法证明则在 DBML 中标注不确定或向用户询问。
内容要求:尽量表达表、列、真实类型、not null、主键、外键与基数、唯一约束、索引(含复合与唯一)、默认值、枚举、有意义的注释、联结表与多对多、审计或时间戳列。名称必须精确,不要现代化、改名或重新解释数据库对象。关系优先使用显式 Ref: 声明,可选关系用可空外键,必需关系用 [not null]。索引写在各表 Indexes 块中,不可因实体字段不可见而省略。用 Note: 记录属于持久化契约的说明,而非通用产品行为。
漂移检查与 CI:若仓库存在 ./scripts/check-schema-drift.sh,应作为文档漂移关卡,更新 db/schema.dbml 后运行;失败则让真实 schema 与 DBML 一致,不要禁用检查或弱化 CI。处理 CI 失败时,读取输出判断是实时/生成 schema、迁移还是 DBML 过期,比对后更新过期一侧,再运行检查并总结同步的对象。
边界:结构持久化文档放 db/schema.dbml,可观察系统行为放 specs/features/。二者同时变化时两份都要更新。完成前确认 db/schema.dbml 存在、所有触及的表/列/外键/唯一约束/索引均已表达、名称与真实数据库完全一致、结构变更与 DBML 变更一起提交、相关行为变更已反映到 specs/features/,并在可行时运行漂移脚本。