Navicat 逆向生成 SQL Server ER 图需启用“包含系统对象”并授予用户对 sys 视图的 SELECT 权限,否则无法读取外键等元数据,导致关系线缺失、表名错乱;还须勾选全部关联表、运行“验证模型”补全禁用外键,并确保导出前显示完整数据类型。
navicat 能逆向生成 sql server 的 er 图,但必须启用「包含系统对象」且用户需有对 sys 视图的 select 权限;否则外键全丢、表名错乱、关系线消失——这不是 navicat 抽风,是它根本查不到约束元数据。
SQL Server 连接设置里必须勾选「包含系统对象」
Navicat 默认跳过 sys 系统视图,而 SQL Server 的外键、主键、索引等元数据全存在 sys.foreign_keys、sys.columns 等表里。不打开这个开关,逆向过程连约束定义都看不到。
- 操作路径:右键已建连接 → 「编辑连接」→ 「高级」选项卡 → 勾选
包含系统对象 - 若用 Navicat Premium Lite,该选项可能叫
Include system objects(英文界面) - 改完必须重新连接,否则设置不生效
用户账号至少要有 SELECT 权限在 sys schema 上
即使 DBA 给了业务库所有权限,若没显式授权访问 sys,Navicat 就会静默失败:ER 图里只有表框,没连线,字段类型显示为 generic,验证模型时提示“未识别外键”。
- 用 SSMS 或 sqlcmd 执行:
SELECT TOP 1 * FROM sys.foreign_keys;,报错则确认权限缺失 - DBA 需执行:
GRANT SELECT ON SCHEMA::sys TO [your_user]; - 注意:SQL Server 2012+ 中,
public角色默认无sys访问权,不能依赖默认配置
逆向时别只选「表」,要确保关联表全部被加载
SQL Server 外键引用的表名大小写敏感(尤其启用了区分大小写的排序规则时),且 Navicat 不自动补全未选中的引用表。比如 orders 表外键指向 Customers,但你只勾了 orders,那关系线就断了。
- 务必使用「数据库 → 逆向数据库到模型」,而不是右键单表「逆向表到模型」
- 弹窗中勾选「表」,取消勾选「视图」和「存储过程」——视图名若与表名相同(如
user_summary视图 +user_summary表),Navicat 会当成两个实体重复绘制 - 如果库极大(>500 张表),先手动勾选核心业务表,避免卡死或超时
导出前必须点「模型 → 验证模型」再手动补关系
SQL Server 允许用 WITH NOCHECK 创建禁用状态的外键,Navicat 默认不识别这类约束。验证模型会扫描所有未映射的外键列,并列出可补全的候选关系,支持一键添加。
- 验证后若弹窗提示“Found 3 foreign keys not imported”,点「Fix」即可批量补线
- 补完仍缺字段注释?检查是否在 SQL Server 中用
sp_addextendedproperty添加过描述,且连接时已启用读取扩展属性(部分 Navicat 版本需在「模型设置」里开启) - 导出 PDF/PNG 前,先右键画布 → 「选项」→ 勾选
显示完整数据类型,否则datetime2(3)会显示成DATETIME
最常被跳过的一步是验证模型——很多人导出后才发现关系线少了一半,其实补全操作就在弹窗里,两秒点完,但没人愿意多等那一下提示。


















