SuperAPI AI 工具集

db-referential-integrity

数据与分析

查看项目

更新于 10-15 22:11

技能介绍

用途:审计支持外键的关系型数据库引擎的外键完整性,兼顾设计完整性与连接/查询计划性能。文档/KV 类配置不适用此模块。

主要能力:检查缺失外键(列名/类型形如 *_id 且指向另一表主键却无 FOREIGN KEY 约束;在订单、支付、会话、会员等财务或认证表上,允许孤儿行的缺失外键为严重度 5 上限情形);检查 ON DELETE/ON UPDATE 动作缺失或危险(默认 NO ACTION/RESTRICT 与关系不符,或可能批量删除的 CASCADE);检测引用环(A→B→C→A,严重度 4);检测复合外键列集/顺序与被引用唯一键不匹配或部分引用;检测回填后仍为 NOT VALID 的未验证外键。

严重度:财务/认证孤儿行缺失外键为严重度 5、fail、双轴、confidence established;引用环严重度 4、warn、双轴;缺失或过宽 ON DELETE 严重度 3–4、warn、设计轴;复合外键顺序不匹配严重度 3、warn。外键列缺索引由 M11 负责,此处仅交叉引用不重复计数。

使用方式:Tier-0 静态检查通过 scripts/parse-schema.mjs 解析 DDL,对每个 _id 风格列检查是否存在匹配的 FOREIGN KEY/REFERENCES 子句,枚举已声明外键并标记缺少显式 ON DELETE/ON UPDATE 动作者,构建外键图并检测环;仅 ORM 源码方向性解析不会触发严重度 5 上限。Tier-1 验证查询列出外键约束及动作:SELECT conrelid::regclass AS child, confrelid::regclass AS parent, confdeltype AS on_delete, confupdtype AS on_update, convalidated AS validated FROM pg_constraint WHERE contype = 'f'; 确认孤儿行:SELECT count() AS orphans FROM child c LEFT JOIN parent p ON c.parent_id = p.id WHERE p.id IS NULL AND c.parent_id IS NOT NULL; 无实时数据库时孤儿计数需 needs_api,不得静默通过。

发现项按 schema/finding.schema.json 输出,如 M3.payments.user_id_no_fk、M3.invoices.fk_cascade_deletes_financial、M3.graph.fk_cycle_a_b_c;每条含 evidence.observed 原文引用 DDL 或目录行,verification.reproduce 为可运行查询(method: ddl_parse / constraint_check / query_stat),expected_impact 带区间与置信度标签。

限制与诚实性:缺失外键仅在孤儿风险真实(财务/认证完整性)时封顶,低风险查找表缺失外键至多 warn;应用层完整性(校验、软外键)是缓解而非替代,数据库级保证仍缺失,不得声称应用代码已修复;无 Tier-1 计数不得断言存在孤儿行,静态结果仅为方向性。