必须先进入「模型」工作区并逆向数据库建模,再筛选核心表、隐藏非目标对象、关闭“包含视图”、确认数据库版本匹配,方可导出准确子图。

为什么“查看ER图”导不出子图
点开数据库后直接选「查看 → ER 图标」,看到的只是只读快照,不能框选、不能隐藏、不能导出局部——它压根不是模型,只是元数据实时渲染。真正能提取子图的前提,是先进入「模型」工作区,否则所有后续操作都无效。
必须先建模,再筛选表
右键数据库 →「逆向数据库到模型」不是一键生成,而是启动建模流程。这一步卡住或结果异常,90% 是因为:INFORMATION_SCHEMA 权限缺失、连接类型没选 MySQL (Native)、目标库处于只读模式。确认这三项通过后,才进入可操作阶段。
- 拖表进画布时,**不要点“全选”**:Navicat 对每张表单独执行
SHOW CREATE TABLE,表数超 50 张就容易超时或界面假死 - 手动展开左侧数据库节点,只勾选明确的核心业务表(如
users、orders、products),跳过logs_%、archive_%、tmp_*类表 - 若模块边界清晰(如 auth、trade、report),分两次逆向:第一次导
auth_*相关表,第二次导trade_*相关表,单次控制在 15–20 张内
用搜索+隐藏快速聚焦子图
Ctrl+Shift+F 只在标题栏显示 模型-xxx.nm 的窗口生效。输入 user_% 可匹配 users、user_profiles 等前缀表;输 order% 不如输 orders 精准,因为通配符不自动补全,且子串匹配可能误中 shipping_order。
- 搜出表后,右键 →「隐藏所选对象」,比手动拖拽移除更可靠
- 隐藏后,画布只剩目标子图,此时布局、连线、字体大小均可自由调整
- 注意:隐藏不等于删除,随时可右键空白处 →「显示全部对象」还原
导出子图前务必关闭“包含视图”
如果库里存在同名视图(比如有 orders 表,又有 orders_summary 视图),Navicat 会把两者都当作实体加载,导致字段重叠、外键线错乱、甚至导出失败。这不是 bug,是它严格按 INFORMATION_SCHEMA 索引的结果。
- 逆向前,在弹出的勾选窗口里,**取消勾选
Include views** - 若已加载,可在左侧模型对象树中手动右键视图 →「从模型中移除」
- 导出格式优先选
PNG(兼容性好)或PDF(矢量清晰),避免选SVG——Navicat 17 导出的 SVG 在部分阅读器中会丢失连线样式
MySQL 8.0,但连的是 MySQL 5.7 实例,哪怕只导三张表,JSON 字段也会变成 UNKNOWN 类型,导致子图语义失真。这个配置藏在模型编辑器左下角,不点开看一眼,根本意识不到它在悄悄影响输出。











