Navicat 对 SQLite 生成 ER 图需满足四个前提:使用 Navicat Premium 16+ 或 Navicat Data Modeler;连接后执行 PRAGMA foreign_keys = ON;建表 DDL 中含显式 FOREIGN KEY 定义;逆向工程中手动勾选表、启用外键选项并排除视图与系统表。
navicat 能对 sqlite 建 er 图,但必须用 navicat premium 16+ 或 navicat data modeler,旧版(如 navicat for sqlite)不支持逆向工程生成 er 图。
确认你用的是支持 SQLite 逆向工程的版本
Navicat for SQLite(绿色版/单数据库版)只有基础 CRUD 功能,逆向工程按钮压根不会出现;只有 Navicat Premium 16 及以上、或独立的 Navicat Data Modeler 才内置 SQLite 的逆向能力。如果你点“模型 → 从数据库导入”后没反应,或弹窗里选不到 SQLite 连接,大概率是版本不对。
- 检查版本号:菜单栏 → 帮助 → 关于 Navicat,确认是
Premium 16.0或更高 - SQLite 连接必须已成功建立并能展开看到表列表,否则逆向入口不可用
- Navicat Data Modeler 支持更完整的符号(Crow’s Foot/IDEF1x)和导出选项,但需单独安装
SQLite 逆向前必须开启外键支持
SQLite 默认关闭外键约束,即使建表时写了 FOREIGN KEY,Navicat 也读不到关系定义,导致 ER 图里全是孤立表、没连线。这不是 Navicat 的 bug,而是 SQLite 的运行时开关未启用。
- 连接 SQLite 数据库后,先执行命令:
PRAGMA foreign_keys = ON; - 该设置只对当前连接生效,重启 Navicat 后需重新执行(不能写进数据库文件本身)
- 验证是否生效:执行
PRAGMA foreign_keys;,返回1表示已开启 - 若建表时没加
FOREIGN KEYDDL(比如 ORM 自动生成的表缺约束),仅开 pragma 也没用——得补上真实外键定义
逆向工程窗口里三个关键勾选项
点击“模型 → 从数据库导入”后,在弹出窗口中别直接点“开始”,先检查以下三项,漏一项就可能丢表、丢关系:
- 在
Select Tables页签,展开你的 SQLite 文件(它没有 schema 概念,但 Navicat 把它当单个 database 显示),手动勾选要导入的表——Select All在 SQLite 下经常失效 - 在
Options页签,务必勾选Include foreign keys,否则即使外键存在也不会画连线 - 取消勾选
Include views和Include system tables(SQLite 的sqlite_master等系统表会干扰识别)
外键线连不上?优先查建表语句本身
Navicat 对 SQLite 外键的识别完全依赖 CREATE TABLE 语句中的 FOREIGN KEY 子句。它不解析注释、不猜逻辑关联,也不读 ORM 的 metadata。
- 右键目标表 → “对象信息” → 查看 DDL,确认有类似
FOREIGN KEY (user_id) REFERENCES users(id)的显式定义 - SQLite 不支持
ALTER TABLE ... ADD CONSTRAINT,所以无法事后加外键——必须重建表 - 复合外键(如
(a,b) REFERENCES t(c,d))在 Navicat 中识别率低,建议先简化成单列外键验证流程 - 如果 DDL 正确但依然没线,尝试导出为
.sql模型文件,用文本编辑器打开,搜索FOREIGN KEY是否被正确解析
SQLite 的 ER 图生成不是“点一下就完事”的流程,核心卡点永远在:版本支持、pragma 开关、DDL 完整性、逆向配置项——四个环节缺一不可。尤其注意 PRAGMA foreign_keys = ON 必须每次连接后手动执行,这点最容易被忽略。


















