Schema 错误是最贵的 bug——一存活就好多年,每次回填都让它更难修,真正能救它的那次迁移没人愿排期。下面这些 Prompt 让 AI 站在未来工程师角度看 schema:负载下怎么查、并发写下怎么迁、10× 量级下怎么扩。覆盖的是那种过了 review 才暴露的失败:什么都用 TEXT、JSON 列没明文形状、cascade 规则跟业务意图对不上、产品真正跑的查询缺组合索引。配合 API 契约评审 Prompt 一起做,让 schema 与 API 不漂离。
这套 Prompt 适合用在哪
- 上线前 schema 设计
- 迁移准备
- 性能审计
- 生产 DB 评审
- ORM (Prisma / Drizzle) → SQL 审计
1. Schema 设计异味
下面是我的 schema(DDL 或 Prisma / Drizzle)。请列 top 5 设计异味:(a) 范式不足;(b) 过度范式;(c) 类型错(全 TEXT);(d) 约束缺失;(e) 隐含假设。每条 1 行修复。
{粘贴}
2. 索引评审
下面:schema + 最常见 10 条查询。逐条:(a) 哪些索引命中;(b) 哪些走全表扫描;(c) 建议索引(单 / 组合);(d) 写入代价的取舍。
{粘贴}
3. 外键 & 级联审计
下面 schema 含外键。逐个评估:(a) 级联(CASCADE / SET NULL / RESTRICT)是否正确;(b) 是否符合业务意图;(c) 生产环境删父行会发生什么。标出问题。
{粘贴}
4. 可空性审计
下面 schema。每个可空列问:(a) NULL 是否有语义还是占位;(b) 查询是否要分支处理;(c) 是否应有默认值。标出应改 NOT NULL + DEFAULT 的字段。
{粘贴}
5. 软删策略
下面 schema。请评估软删策略:(a) 跨表是否一致;(b) deleted_at 索引;(c) 通过 FK 级联软删;(d) 隐藏已删行的视图。提议统一方案。
{粘贴}
6. 审计字段完整性
下面 schema。每张表检查:(a) created_at;(b) updated_at;(c) created_by / updated_by;(d) version。标出缺字段的表并提议默认。
{粘贴}
7. 迁移安全
下面是迁移 SQL 文件。评估安全性:(a) 是否锁表;(b) 并发写下顺序是否安全;(c) 是否可回滚;(d) backfill 是否高效。提议更安全的分阶段方案。
{粘贴}
8. 多对多关联表评审
下面是多对多 join 表。评审:(a) 复合 PK vs surrogate;(b) 顺序 / 唯一性;(c) join 行上的时间戳;(d) 级联规则;(e) 双向索引。
{粘贴}
9. 多态关系评审
下面 schema 使用多态关系(如 {commentable_type, commentable_id})。请评估:(a) 与拆表的取舍;(b) FK 强制不足;(c) 查询模式;(d) 何时该迁回各类型独立表。
{粘贴}
10. JSON / JSONB 列审计
下面 schema 有 {N} 个 JSON / JSONB 列。逐个评:(a) schema 是否隐式无文档;(b) 是否按路径查询;(c) 是否有 GIN 索引;(d) 是否值得改回关系化。每列给结论。
{粘贴}
11. 扩容就绪评审
下面 schema。评估按 10x 容量扩容就绪度:(a) 易膨胀的表;(b) 分区候选;(c) 热点索引;(d) 触发器 / FK 引发的写放大。输出 5 行报告。
{粘贴}
12. ORM → SQL diff
下面是我的 Prisma / Drizzle schema 与生成 SQL。请找出:(a) ORM 字段缺少对应 SQL 约束;(b) ORM 丢失的 SQL 功能;(c) ORM 隐藏的假设。提议手写补丁。
{粘贴}
容易踩的坑
- 全用 TEXT
- 没有 NOT NULL
- 组合查询缺组合索引
- 跨表软删策略不一致
- 迁移在生产锁表
- JSON 列 schema 隐式无人记录