SuperAPI AI 工具集

db-review

数据与分析

查看项目

更新于 10-15 12:39

技能介绍

用途

db-review 用于数据库代码审查与 Migration 安全检查。其核心理念是:数据库问题的修复成本随阶段指数增长——代码审查 < migration 审查 < 上线后排查 < 数据修复,因此应尽早发现、尽早修复。

审查模式

工具根据请求类型确定审查范围:

  • 代码审查模式(改了数据库相关代码):检查 SQL 质量、查询性能与锁风险。
  • Migration 审查模式(新增/修改 migration 文件):检查安全性、Schema 漂移与回滚方案。
  • 全量审查(上线前或用户主动要求):代码审查 + Migration 审查 + Schema 一致性。

技术栈识别

自动检测项目使用的数据库和 ORM,检测目标包括:Prisma(prisma/schema.prisma、@prisma/client)、TypeORM(typeorm 依赖、@Entity() 装饰器)、Sequelize(sequelize 依赖、.define() 调用)、Drizzle(drizzle-orm 依赖、drizzle.config.ts)、SQLAlchemy(sqlalchemy 依赖、Base.metadata)、原生 SQL(.sql 文件、query()/execute() 调用),以及数据库类型(连接字符串、驱动依赖如 pg/mysql2/better-sqlite3)。

代码审查能力

慢 SQL 模式

逐条检查反模式并标注风险等级,包括:SELECT *、无 WHERE 的全表查询、WHERE 中对列使用函数、LIKE '%keyword%' 前缀通配符、OR 条件跨列、WHERE 中的子查询、ORDER BY 无索引支撑、DISTINCT 掩盖重复。审查方法为搜索所有 SQL 语句(原生查询、ORM raw query、query builder),对每条 SQL 判断是否命中反模式,ORM 调用同样检查(如 findAll() 无条件等价于全表扫描)。

N+1 查询

检查循环体内的数据库调用(for/forEach/map 中的 find/query/select)、ORM 关联查询是否使用 eager loading(include/joinedload/with)、GraphQL resolver 是否使用 DataLoader。

锁表风险

评估 ALTER TABLE ADD COLUMN(有默认值)、ALTER TABLE ADD INDEX、ALTER TABLE MODIFY COLUMN 改类型、无 WHERE 的大批量 UPDATE/DELETE、长事务中的 DDL 等操作在 MySQL 与 PostgreSQL 上的锁表风险,并给出安全替代方案(如 pt-online-schema-change、CREATE INDEX CONCURRENTLY、分批更新/删除、DDL 独立事务)。大表(>10 万行)的 DDL 操作标记为高风险。

索引审查

检查缺失索引、冗余索引(INDEX(a) 与 INDEX(a,b) 并存)、过多索引(单表 >6 个)、复合索引列顺序不符合最左前缀原则、低选择性索引、未使用索引。

事务与并发

检查事务范围是否过大、死锁风险(多事务以不同顺序操作同一组表)、隔离级别是否过高、连接泄漏、并发更新是否有乐观锁保护。

Migration 审查能力

破坏性操作检查

标记 DROP TABLE、DROP COLUMN、RENAME TABLE/COLUMN、TRUNCATE、ALTER COLUMN 收窄类型、对已有数据列加 NOT NULL 约束等高风险操作,并要求每个破坏性操作有对应回滚方案。

Schema 漂移检测

漂移来源包括:手动改数据库未写 migration、migration 执行顺序不一致、migration 只跑了一半、ORM model 与 migration 不同步、多人开发 migration 文件冲突。检查流程为:收集 ORM model/entity 定义、migration 文件链、数据库实际状态,交叉比对 Model vs Migration、Migration 完整性、新增字段检查,输出不一致清单(字段名、model 定义、migration 定义、差异描述)。具体检查项涵盖字段一致、类型一致、可空性一致、默认值一致、索引一致、关联关系一致、migration 时间线连续。

回滚方案检查

要求 down/rollback 函数存在且非空、逻辑正确(up 中加的列 down 中要删、改的类型要改回)、破坏性操作需说明数据恢复策略。

Migration 最佳实践

单一职责(一个 migration 只做一件事)、可重复执行(幂等,IF NOT EXISTS)、数据迁移分离、命名规范(如 add_email_to_users)。

风险分级与输出

风险等级分为:高危(数据丢失、锁表超 30s、已知 schema 漂移、无回滚方案,必须修复)、中危(性能隐患如 N+1、缺索引,回滚方案不完整,潜在并发问题,建议修复)、低危(最佳实践缺失、小表操作,记录不阻断)。快速审查输出到终端,完整审查生成报告到 docs/audits/YYYY-MM-DD-db-review.md。

与其他 skill 的衔接

  • task-finish:改动涉及 migration 文件时提示跑 db-review。
  • security-audit:SQL 注入由 security-audit 负责,查询性能由 db-review 负责。
  • perf-profiling:发现 DB 慢查询后交给 db-review 做 SQL 层面深度分析。

注意事项

先理解业务再审查(脱离业务的索引建议无意义);小表不教条;ORM 不是借口(必要时看生成的实际 SQL);注意环境差异(本地 SQLite + 生产 PostgreSQL 的 migration 语法差异是漂移常见来源);不替代 DBA(复杂分库分表、主从延迟等架构级问题需 DBA 介入)。