# Reflection: DDL CONSTRAINT Leakage into TypeScript Interfaces > Date: 2026-06-05 | Severity: P0 | Recurrence: 1 ## Context Backend Builder Agent (SF-04) — `schema.ts` 生成时 DDL PRIMARY KEY / FOREIGN KEY / CONSTRAINT 行被当作数据列,泄露进 TypeScript interface 定义。 Example: `"PRIMARY KEY (id)"` → parsed as column `PRIMARY` with type `KEY`, `FOREIGN KEY (user_id) REFERENCES users(id)` → parsed as column `FOREIGN` etc. ## Root Cause DDL parser 没有区分 "column definition" 行和 "constraint" 行。`CREATE TABLE` 语句中的 CONSTRAINT 子句以特殊关键字开头(PRIMARY KEY, FOREIGN KEY, UNIQUE, CHECK),不应被解析为列定义。 ## Fix Added `isConstraintLine()` check before parsing each line as a column. Lines starting with `PRIMARY KEY`, `FOREIGN KEY`, `UNIQUE (`, `CHECK (` are skipped in column parsing. ## Pattern Class **DDL-to-Code Mapping Error** — SQL DDL 的多层结构(column/constraint/index)被扁平化为单一映射时丢失语义。 ## Future Trigger - Any SQL schema → code generation - Any DDL parser - Any ORM code generator ## Checklist - [ ] DDL 解析器必须有 column / constraint / index 三层分离 - [ ] Constraint 行识别:PRIMARY KEY, FOREIGN KEY, UNIQUE (, CHECK ( - [ ] 生成后验证:interface 字段数 ≤ 表列数(不含约束行) - [ ] 跑 benchmark 验证所有领域 schema 生成正确 ## Recurrence Count 1