Navicat Premium 不支持按微服务自动切分 ER 图,需人工筛选表、逆向建模;跨 schema 外键因权限或未导入而失效;导出 A4 图需手动设画布尺寸并关闭缩放;共享表归属须人工判定。

Navicat Premium 本身不支持按微服务模块自动切分 ER 图——它没有「模块识别」能力,也不会读取表名前缀、schema 名或注释来聚类逻辑边界。所谓“按微服务拆解”,必须由人定义范围,再手动隔离、建模、导出。
怎么选中指定微服务关联的表并逆向进模型
Navicat 的模型导入是全量或半手动筛选,不能靠正则或标签过滤。你得先在数据库连接里人工圈出目标表:
- 在左侧连接树中展开数据库 → 按住
Ctrl(Windows)或Cmd(macOS)逐个点击属于订单服务的表,比如orders、order_items、payments - 右键任意一个已选中的表 → 选择「逆向表到模型」(不是「逆向数据库到模型」)
- 弹窗中确认勾选了全部已选表,取消勾选无关表(如
users、notifications),再点「开始」 - 若表跨 schema(如
order_service.orders和payment_service.payments),需确保连接用户对两个 schema 都有SELECT权限,否则部分表会静默缺失
为什么外键连线在跨模块时失效或错连
Navicat 只根据 PostgreSQL 的 pg_constraint 系统表还原外键,不会猜测语义关系。常见断连场景:
-
orders.user_id引用auth.users.id,但authschema 未被导入模型 → 连线消失,只剩孤立字段 - 两模块间用消息队列通信,无物理外键(如订单服务不直接连用户表)→ Navicat 模型里完全没连线,即使业务上强耦合
- 存在同名字段但非外键(如所有表都有
created_at)→ Navicat 不会误连,这点放心
补救方式只有两种:要么把依赖的上游表也拖进当前模型(推荐),要么在模型编辑器中右键表 → 「编辑表」→ 「外键」页签手动添加(但导出后无法反向同步到 DB,仅作图示)。
导出单模块 ER 图时如何避免内容溢出或压缩失真
默认画布尺寸远超 A4,直接导出 PDF 打印常被截断。关键操作是预设画布而非依赖自动缩放:
- 打开模型后,先切换到 ER 图视图(顶部菜单「查看」→「ER 图标」)
- 点击「布局」→「画布大小」→「自定义」,输入
2480×3508(对应 A4 @300dpi) - 选中所有表 → 按
Ctrl+A全选 → 拖拽至画布中央,留足四周空白(至少留 200px 边距) - 导出时选「PDF」格式;打印 PDF 时,在系统打印对话框中关闭「适应页面」,勾选「实际大小」
- 若仍出现连线交叉密集,可右键空白处 →「自动布局」→ 选「分层」算法,再微调主表位置
真正麻烦的不是操作步骤,而是微服务边界本身模糊:一张 audit_logs 表可能被所有模块写入,但它该归属哪个模型?这类共享表需要你主动判断——放进所有相关模型,或单独建一个「infra」模型统一维护。Navicat 不会替你做这个决策。


















