SuperAPI AI 工具集

db-defaults-generated

通用与其它

查看项目

更新于 10-15 22:11

技能介绍

用途:db-defaults-generated(M6)属于 claude-db 的设计轴(Tipos 类别)审计模块,针对支持默认值与生成列的数据库引擎,检查列默认值和生成列是否把正确性放在数据源头。

主要能力:检查仅由应用代码设置的 created_at/updated_at(缺少 DEFAULT now()/CURRENT_TIMESTAMP、ON UPDATE 或触发器);检查本应由 GENERATED ALWAYS AS ... STORED 维护、却由应用同步的派生列(如 full_name、total = qty*price、search_vector);检查非确定性或错误默认值,例如掩盖缺失 NOT NULL 的默认值、用 DEFAULT '' 代替 NULL;检查 serial 与 GENERATED ... AS IDENTITY 及序列归属;检查缺失的布尔/标志默认值。

使用方式:Tier-0 静态检查通过 scripts/parse-schema.mjs 解析 DDL/快照,标记无 DEFAULT 的 _at 时间戳列、名称暗示派生却为普通列的字段、空字符串/哨兵默认值,并提示 serial 与 identity 的取舍。Tier-1 验证查询使用只读连接检查 information_schema.columns 的 column_default、is_generated、generation_expression,并用 SELECT count() AS drifted FROM order_items WHERE total <> qty * unit_price; 确认派生列是否漂移。结果按 schema/finding.schema.json 输出,每条发现包含逐字引用的列 DDL 或默认值证据、可运行复现查询(方法为 ddl_parse / schema_introspect / query_stat)以及带置信度的影响评估。

严重度:应用维护的派生存储列(漂移风险)为 severity 3、warn、fixable: proposed;缺少 created_at/updated_at 数据库默认为 severity 2–3、warn、fixable: auto;DEFAULT ''/哨兵掩盖 NULL 语义为 severity 2、warn。M6 无 sev-5 上限。

适用场景与限制:适用于支持默认值/生成列的引擎,建议范围应限定在检测到的引擎;生成列存在引擎与版本支持限制(如 Postgres 仅 STORED,MySQL 支持 VIRTUAL/STORED)。数据库默认值不能替代应用意图,仅在数据库侧强制明显更安全时标记。静态检查结果仅为方向性,未通过 Tier-1 不匹配计数前不得声称派生列已漂移。其他细节暂未提供。