navicat 16 生成 er 图需满足三前提:数据库用户须对 information_schema 或 pg_catalog 有 select 权限;连接必须使用原生驱动(如 mysql native);目标库不能处于只读模式,否则将导致表缺失、关系断开或字段类型显示为 unknown。
navicat 16 能直接生成 er 图,但不是点一下就出图——它依赖连接权限、驱动类型和元数据完整性。如果图里表缺失、关系断开或字段显示为 unknown,大概率是底层配置没对齐,而不是操作步骤错了。
逆向工程前必须检查的三件事
Navicat 16 的 ER 图生成基于逆向工程(Reverse Engineer),这个过程会执行 SHOW CREATE TABLE、SELECT * FROM information_schema.KEY_COLUMN_USAGE 等查询。以下三点任一不满足,都会导致“空图”或“断连”:
- 数据库用户必须有
SELECT权限在information_schema(MySQL)或pg_catalog(PostgreSQL)上,只给业务库权限不够 - 连接必须选
MySQL (Native)或PostgreSQL (Native)驱动,不能用ODBC—— 否则外键注释、CHECK 约束可能读不到 - 目标库不能处于只读模式(如 PostgreSQL 的
READ ONLY事务级别),否则元数据查询返回不全
触发逆向工程的正确入口和关键选项
别在“查看→ER图表”里硬切——那个模式只适用于已打开的单表,且不识别外键。真正生成完整 ER 图的路径是:
菜单栏 → 工具 → 逆向工程 → ER 图
弹窗里三个选项直接影响结果质量:
-
选择数据库对象:默认勾“所有表”,但若库中有分表(如log_202501、log_202502),建议手动勾选核心业务表,避免超时卡死 -
包含外键关系:必须勾选,否则即使表间有外键,图里也全是孤立矩形 -
使用表别名作为实体名称:建议关闭——它会把user_profile缩成up,降低可读性;缩写应在建模后双击实体手动改
生成后关系线缺失或字段类型异常怎么办
这不是 Navicat 16 的 bug,而是源库元数据本身不规范:
- 外键没进
information_schema.KEY_COLUMN_USAGE?比如 MySQL 中只执行了ALTER TABLE ADD COLUMN xxx INT,漏了ADD CONSTRAINT,Navicat 就找不到关系线 - 字段类型显示为
UNKNOWN或TEXT?常见于 PostgreSQL 的citext、MySQL 的JSON类型,Navicat v15 及更早版本不识别,v16+ 已支持,确认已升级 - 同一张表出现两次?检查是否误勾了
包含视图,而恰好有同名视图(如order_summary表 +order_summary视图),Navicat 会当作两个实体处理
导出前务必确认模型状态
生成后的 ER 图默认保存在内存中,关掉窗口即丢失。导出前注意:
- 先点
文件→保存模型,扩展名是.nm,这是唯一能保留连线、布局、注释的格式 - 导出图片选
文件→导出为→PNG或PDF,但注意:导出时不包含未显示在画布上的表(哪怕已导入),拖拽所有实体到可视区域再导出 - 如果导出 PDF 后文字模糊,不是分辨率问题,而是字体嵌入失败——换用
SVG格式更可靠,后续可用 Inkscape 或浏览器打开编辑
最常被忽略的点是:逆向工程完成后,Navicat 16 不自动把外键约束“画出来”,它只读取已有约束。没有建外键,就不可能有连线——别指望工具补逻辑,得先让数据库元数据干净。











