用途
本技能用于在实施变更之前,对产品的持久化数据进行建模。它帮助理解并演进持久化数据,避免在没有依据的情况下选择数据库或库。使用时应先阅读技术栈、当前系统、迁移、schema、模型、契约和测试,再提出变更建议。
主要能力
- 识别代码中观察到的实体、其角色以及关系。
- 记录字段、类型、必填性、来源、生命周期,以及谁可以查询或修改每项信息。
- 在相关时描述唯一性、一致性、保留、删除、历史与迁移。
- 更新 spec 的数据部分,并将已确认的回答转交至 $specsfy-aux-database 和 .specsfy/DATABASE.md。
- 为创建、读取、更新、删除、授权和无效数据推导场景。实现时使用检测到的数据库专家。
- 不虚构字段、关系或技术。当当前系统无法回答时,由人员确认产品需要保存什么。
使用方式
何时使用
- 在修改表、schema、模型、迁移或持久化契约时使用。
- 在创建 spec 之前梳理关系与生命周期时也可使用。
- 不要在没有项目数据的情况下用于选择数据库库。
流程
- 阅读技术栈、迁移、schema、模型和现有测试。
- 分离观察到的实体、关系、字段和状态。
- 记录唯一性、保留、删除和历史规则。
- 将提案与当前契约和查询进行比较。
- 将确认结果转交至项目的数据库技能。
- 对任何与数据库相关的变更,要求一个带版本化文件的 [MIGRATION] 任务,并在测试库中检查其应用。
标准
- 每个字段记录类型、来源、存在性和生命周期。
- 每个关系说明基数和加载方式。
- 每个迁移保留现有数据,或描述所需的转换。
反模式
- 创建在产品中没有观察到用途的字段。
- 在未检查查询、工厂和测试的情况下修改关系。
- 在阅读现有技术栈之前选择技术。
验证
- 运行与持久化模型相关的测试和验证器。
- 在数据库副本中检查迁移,并比较生成的 schema。
- 在结束任务前,确认文件、应用命令和迁移状态查询。
- 没有项目可验证的输出,不要声明模型已就绪。
适用场景
适用于需要修改表、schema、模型、迁移或持久化契约的开发工作,也适用于在创建 spec 前梳理实体关系与数据生命周期。
限制
- 不适用于在没有项目数据的情况下选择数据库库。
- 不虚构字段、关系或技术;当前系统无法回答时需由人员确认。
- 没有项目可验证的输出,不得声明模型已就绪。
相关技能
- $specsfy-aux-database:维护项目的持久化地图。
- $specsfy-specialist-postgres:Postgres 专有细节。
- $specsfy-specialist-laravel:Laravel 迁移与模型。
阅读 references/standards.md 以获取建模、迁移和持久化契约的来源。