Validate Model 立即报 Missing primary key 和 Orphaned table 两类错误;前者导致外键无法建立,后者使表脱离关系网络,不修复则正向工程生成的 SQL 可能建表失败或不被识别为规范模型。

Validate Model 会立刻报哪些问题
右键模型画布 → Validate Model 不是走形式,它会在毫秒级弹出错误列表,核心就两类:Missing primary key(字段没设主键)和 Orphaned table(孤立表,即没被任何外键引用、也没引用别的表)。这两类问题不解决,后续正向工程生成的 SQL 很可能建不出表,或建出来后无法被其他工具识别为规范关系模型。
为什么“验证通过”比“能导出SQL”更重要
Navicat 17 的模型编辑器不做实时语法校验,也不会警告你用了 MySQL 保留字当表名(比如 order、group),更不会提示字段名重复。只有 Validate Model 会强制检查:
- 每个表是否至少有一个
Pk字段且类型为整数(否则外键无法建立) - 所有外键连线是否真实指向一个已存在的表和字段(名字拼错、大小写不一致都会失败)
- 是否存在循环依赖(A→B→C→A)或中间表缺失(多对多关系只画了两端,没加关联表)
一旦跳过这步直接导出 SQL,你大概率会在执行时看到 ERROR 1005 (HY000): Can't create table 或 Unknown column 'xxx' in 'foreign key'。
验证失败后怎么改才不反复踩坑
常见修复动作不是“重画连线”,而是先看报错字段名和表名是否带空格、中文、短横线——Navicat 模型里允许这些字符,但 MySQL 默认不认。建议统一用下划线+小写字母命名,例如把 user Info 改成 user_info。
修复顺序也很关键:
- 先给所有标红的表补上
Pk+A_I(注意:必须同时勾选,只勾一个无效) - 再检查孤立表:是真不需要关联(如日志表),就右键 →
Exclude from Forward Engineering;是该有关联,就补上外键连线,别只拖线不点确认 - 最后重新运行
Validate Model,直到弹窗显示 “No validation errors found”
验证通过后别急着导出,先调布局
Validate Model 只管逻辑正确性,不管视觉排版。导出 PDF/PNG 时,它直接按当前画布位置截图——如果所有表堆在左上角,生成的图根本没法看。务必在验证通过后手动拖拽调整表位置,或使用「自动布局」前先清理掉无效连线和临时测试表。否则交出去的 ER 图,别人第一反应是“这人没理清关系”。


















