Navicat 逆向生成 ER 图需满足:已连接结构完整(含主外键)的主流数据库,用户有元数据查询权限,建议使用 Navicat 15+;操作路径为右键数据库→Reverse Engineer to ERD;缺外键则无连线,须在库中补外键后重新生成。

Navicat 逆向生成 ER 图的前提条件
Navicat 不是靠“一键扫描”自动画图的工具,它需要先有已连接的数据库,且该数据库中表已存在、结构完整(含主键、外键)。如果表里没定义外键约束(比如只靠命名约定模拟关联),Navicat 就无法识别关系,生成的图里只有孤立的表节点。
- 必须使用支持元数据读取的连接类型:MySQL、PostgreSQL、SQL Server、Oracle 等主流数据库均可,SQLite 和部分国产库(如达梦)可能不完整支持外键解析
- 用户账号需具备
SELECT权限访问information_schema或系统视图(如pg_constraint) - Navicat 版本建议为 15 或更高;旧版(如 12)对 PostgreSQL 外键识别有 Bug,可能漏关系
在 Navicat 中打开并生成 ER 图的具体步骤
不是从菜单栏点“新建 ER 图”,而是基于已有表反向构建:
- 在左侧连接列表中,右键目标数据库 → 选择
Reverse Engineer to ERD - 弹窗中勾选要纳入建模的表(可全选,也可按 Ctrl/Cmd 多选)→ 点
OK - 等待加载完成(进度条走完),会自动弹出新标签页,显示带连线的 ER 图
- 若图中表之间无连线,大概率是原表没设外键;此时不能靠拖拽“手动连”,因为 Navicat 的 ERD 是只读反向结果,不支持手动添加逻辑关系
注意:Reverse Engineer to ERD 和 Design Table 是两套系统——前者读取真实 DDL 约束,后者只是编辑器,改了设计不等于改了库里的外键。
外键缺失时的补救方式(非 Navicat 内操作)
Navicat 不提供“推测式建模”,也不会根据字段名(如 user_id)自动猜关系。如果发现图里缺连线,得回数据库补外键:
- MySQL 示例(假设
orders表缺指向users的外键):ALTER TABLE orders ADD CONSTRAINT fk_orders_user_id FOREIGN KEY (user_id) REFERENCES users(id);
- PostgreSQL 需额外确认
orders.user_id和users.id类型严格一致(比如都是integer,而非一个bigint一个integer),否则报错foreign key constraint cannot be implemented - 补完后,必须重新执行
Reverse Engineer to ERD,不能刷新或重载当前图
导出与调整 ER 图的实用限制
生成后的图支持导出为 PNG/SVG/PDF,但布局是算法自动排布的,不支持拖动表位置后保存为默认模板;每次重新生成都会重排。
- 双击表可查看字段列表,但不能在此修改结构(那是
Design Table的事) - 字段名过长会缩写显示(如
created_at_timestamp→createdat...),鼠标悬停才显示全名 - 如果数据库里有循环外键(A→B→C→A),Navicat 可能报错中断生成,或生成不完整图;这时得先检查
information_schema.KEY_COLUMN_USAGE手动定位冲突
外键定义是否真实存在于数据库,是整个流程的唯一可信源;别指望 Navicat “智能脑补”。











