用途:审计关系型 schema 的规范化程度,识别更新、插入、删除异常的设计根源,并区分有纪律与无纪律的非规范化。仅适用于关系模型;文档/KV 存储的嵌入文档不按 3NF 评判。
主要能力:1NF 检查列原子性,如逗号分隔的 tags、phone_numbers,重复组列 addr1/addr2/addr3、item_1/item_2,以及用数组替代连接表;2NF 检查复合主键上的部分依赖,如 order_items(order_id, product_id, product_name) 中 product_name 仅依赖 product_id;3NF 检查非键列之间的传递依赖,如 employees 中的 dept_name 应归属 departments;非规范化纪律检查重复或派生列(total、full_name、缓存计数)是否缺少生成列定义、触发器或文档化刷新路径。
使用方式:Tier-0 静态检查通过 scripts/parse-schema.mjs 解析 DDL,检查列清单,标记分隔列表列名、编号重复列,以及名称匹配其他表实体的非键列(_name、_label 与 _id 并存)。Tier-1 验证查询确认疑似列内 CSV 是否真含多值:SELECT count() AS rows_with_delimiter FROM <table> WHERE position(',' IN <column>::text) > 0; 传递依赖可执行 SELECT dept_id, count(DISTINCT dept_name) AS distinct_names FROM employees GROUP BY dept_id HAVING count(DISTINCT dept_name) = 1; 无实时数据库时计数断言保持 needs_api,不会静默通过。结果按 schema/finding.schema.json 输出,证据引用真实 DDL 行,复现命令标注方法,影响按高/中/低分级并附置信度。
适用场景:关系型 schema 设计评审、迁移前审计、代码库静态扫描。
限制:仅设计轴,严重度最高为 4,不设 5;静态信号为方向性,不虚构异常率或行数;非规范化本身不判为缺陷,只标记无刷新路径、无文档的冗余;文档存储不适用本模块。