SuperAPI AI 工具集

db-constraints

数据与分析

查看项目

更新于 10-15 22:11

技能介绍

用途:db-constraints(M5)属于设计轴中的 Constraints 类别,用于审计数据库声明式约束,适用于会强制执行声明式约束的引擎;文档型存储应改用 Validación-schema 类别。

主要能力:检查语义必需列(如指向强制父表的 FK、email、status、时间戳)缺失 NOT NULL;检查数量、价格、状态枚举、日期区间、邮箱格式等域规则缺失 CHECK;检查 email、username、slug、external_id 等自然键缺失 UNIQUE;检查大小写不敏感唯一性(如 email 需 citext 或 CREATE UNIQUE INDEX ON users (lower(email)));检查可空列 UNIQUE 陷阱(引擎将每个 NULL 视为不同,如 UNIQUE(user_id, deleted_at) 在软删除场景失效,建议部分/过滤唯一索引或 NULLS NOT DISTINCT);检查声明为 NOT VALID / NOCHECK 且从未验证的约束。

严重度:认证/自然键缺失 UNIQUE 允许重复身份为 severity 4;可空 UNIQUE 静默放行重复为 severity 4;必需 FK/列缺失 NOT NULL 为 severity 3;缺失 CHECK 为 severity 2–3。M5 无 sev-5 上限。

使用方式:Tier-0 静态检查通过 scripts/parse-schema.mjs 解析 DDL/快照,列出缺 NOT NULL 的列、检测无 UNIQUE 的自然键列名、找出成员列可空的 UNIQUE、扫描数量/价格/日期区间列缺失 CHECK。Tier-1 验证查询使用 information_schema 盘点约束与可空性,并用 SELECT user_id, count() FROM memberships WHERE deleted_at IS NULL GROUP BY user_id HAVING count() > 1; 确认可空 UNIQUE 是否真有重复。发现按 schema/finding.schema.json 输出,例如 M5.users.email_no_unique、M5.memberships.over_nullable_unique、M5.order_items.quantity_no_check、M5.events.user_id_nullable,每条含 evidence.observed 原文 DDL、verification.reproduce 可运行查询、expected_impact 分级与置信度。

限制:应用层校验不能替代数据库约束,多写入方(任务、管理脚本、副本)会绕过应用;可空 UNIQUE 陷阱与引擎版本相关(Postgres 15 前 NULL 互不相同,15 起支持 NULLS NOT DISTINCT),建议需限定到检测到的引擎/版本;静态检查结果仅为方向性,未做 Tier-1 计数前不得声称存在重复或违规。