用途
Database Schema 是一个“模式感知”技能,用于 AI 编码助手(如 Claude)的数据库相关工作。它要解决的问题是:会话进行到中途时,AI 会忘记数据库模式的细节,导致列名写错、遗漏字段、类型不正确。TDD 只能在运行时发现这类问题,而本技能希望更早地预防。
核心能力
核心规则是:在编写任何触碰数据库的代码之前,先读取模式。必做步骤包括:
- 读取模式文件(位置见下文);
- 核验即将使用的列与类型确实存在;
- 在编写查询时于回复中引用模式;
- 使用生成的类型(Drizzle/Prisma 等)进行类型检查。
若模式文件不存在,则要求先创建后再继续。
按技术栈的模式位置与类型生成
技能给出了一张对照表:
- Drizzle:模式位于 src/db/schema.ts 或 drizzle/schema.ts,使用内置 TypeScript 类型。
- Prisma:模式位于 prisma/schema.prisma,使用 npx prisma generate 生成类型。
- Supabase:模式位于 supabase/migrations/*.sql 加类型,使用 supabase gen types typescript 生成。
- SQLAlchemy:模式位于 app/models/*.py 或 src/models.py,使用 Pydantic 模型。
- TypeORM:模式位于 src/entities/*.ts,装饰器即类型。
- 原生 SQL:模式位于 schema.sql 或 migrations/,需要手动维护类型。
模式速查文件
技能建议创建 _project_specs/schema-reference.md,用于快速查阅,其中可列出各表(如 users、orders)的列、类型、是否可空、默认值与备注,以及关系与枚举。文件为自动生成或人工维护,并提示 AI 在数据库工作前先读它。
使用方式
在写任何数据库代码前,AI 必须完成“模式核验清单”:读取模式文件路径、列出所用列并确认存在、列出类型映射、核对外键关系、处理可空字段。技能给出了一个实际示例,针对“添加订单历史端点”任务逐项勾选核验内容。
技能还给出各栈的类型生成命令与代码片段,例如 Drizzle 通过 pgTable 定义表并导出 $inferSelect / $inferInsert 推导类型;Prisma 在 schema.prisma 中定义模型并用 npx prisma generate 生成;Supabase 用 supabase gen types typescript 从本地或远程数据库生成 TypeScript 类型;SQLAlchemy 结合 Pydantic 定义校验模型。此外还给出类型安全查询示例,说明 Drizzle 与 Prisma 能在编译期捕获错误列名,而原生 SQL 字符串没有类型保护,容易在运行时才暴露错误。
工作流
技能把模式校验作为扩展版 TDD 流程的第 0 步:先读并核验模式、记录缺失的表或列;然后 RED——编写使用正确列名并导入生成类型的测试,使测试失败只源于逻辑而非模式错误;接着 GREEN——用类型安全查询实现;最后 VALIDATE——用 tsc --noEmit 或 mypy 捕获模式漂移,用测试验证运行时行为。
迁移工作流为:更新模式文件、生成迁移(Drizzle 用 npx drizzle-kit generate,Prisma 用 npx prisma migrate dev --name add_column,Supabase 用 supabase migration new add_column)、重新生成类型、更新 schema-reference.md、运行类型检查找出所有破损代码、修复类型错误并更新测试后执行完整验证。
会话启动协议要求:会话涉及数据库工作时,立即读取模式文件,读取 _project_specs/schema-reference.md(若存在),在会话状态中记录相关的表与列,并在写代码时显式引用模式。技能还列出常见模式错误及预防方式,以及一长串反模式(如猜测列名、使用原生 SQL 字符串、不核验硬编码、忽略类型错误、迁移后不重新生成类型、假定可空性)和设置与逐任务清单。
适用场景
适合 AI 辅助的数据库开发场景,包括编写查询、生成接口、执行迁移和做类型安全检查。使用效果与项目是否配置了模式文件与类型生成相关;对于没有模式文件或类型生成配置的项目,技能会要求先补齐这些前提,具体命令与代码需按所用技术栈执行。