Navicat 不支持直接从 DDL SQL 文件导入模型,必须先执行 DDL 创建数据库对象,再通过“从数据库导入”生成 ER 图;模型导出应使用“生成 SQL→正向工程”,而非“转储SQL文件”。
Navicat 不支持直接导入 DDL 文本生成模型
navicat 的「模型」功能(er 图)不接受纯 sql ddl 文件作为输入源——哪怕内容完全合法,create table 语句再多、外键定义再完整,它也不会解析并渲染成可视化模型。这是因为模型构建依赖数据库实时元数据,而非静态文本。你看到的「从 sql 文件导入模型」选项根本不存在,所有尝试拖入 schema.sql 或点击「新建模型 → 导入」后选择 .sql 文件,都会失败或静默忽略。
必须先执行 DDL,再从数据库反向建模
唯一可靠路径是让 DDL 真正在目标数据库中落地,然后通过 Navicat 的「从数据库导入」触发 ER 图生成。这个过程看似多一步,但绕不开:
- 在 Navicat 中连接目标数据库(如 PostgreSQL 或 MySQL),确保用户有
CREATE、SELECT权限 - 右键该连接下的数据库 → 「运行 SQL 文件」→ 选中你的 DDL 文件 → 勾选「以 UTF-8 编码运行」→ 开始执行
- 执行完成后刷新数据库节点,确认所有表已创建(注意检查外键图标是否显示,若无,说明外键语句未生效或被跳过)
- 点击顶部菜单「模型」→ 「新建模型」→ 「工具」→ 「从数据库导入」→ 选择刚执行完的数据库 → 开始
如果 DDL 中含视图、函数等对象,默认不会出现在模型里,需在「从数据库导入」向导的「高级」页手动勾选对应类型。
DDL 文件常见导致建模失败的坑
即使 SQL 执行成功,模型仍可能缺失表或关系,原因往往藏在 DDL 细节里:
-
IF NOT EXISTS在部分 PostgreSQL 版本下会导致 Navicat 无法识别表是否真正创建,建议删掉这类条件语句再执行 - PostgreSQL 的双引号标识符(如
"user")在 MySQL 目标库中会报错,必须提前替换为反引号`user` - 字段注释用的是
COMMENT ON COLUMN(PostgreSQL)还是COMMENT 'xxx'(MySQL)?不匹配会导致 Navicat 读不到注释,但不影响建模本身 - 跨 schema 引用(如
REFERENCES other_schema.users(id))若目标库没启用 search_path 或没创建对应 schema,外键会被静默丢弃
执行完 DDL 后,务必手动查一遍 information_schema.tables 和 information_schema.key_column_usage,确认表数、主键、外键数量与 DDL 声明一致——这是模型能否完整生成的前提。
模型导出后想回写为 DDL?别用「转储SQL文件」
如果你是从其他工具(如 dbdiagram.io、DBeaver)导出的 DDL,又想用 Navicat 模型编辑后再导出更新版 SQL,注意:转储SQL文件 → 结构… 虽然能生成 DDL,但它基于当前数据库状态,不是模型文件本身的定义。真正的模型导出路径是:右键模型画布 → 「生成 SQL」→ 选「正向工程」→ 设置目标数据库类型 → 保存为 .sql。这个输出才忠实反映模型里的字段顺序、关系连线、注释等设计意图。
容易被忽略的一点:Navicat 模型里手动添加的“逻辑关系”(虚线箭头)不会生成外键约束,只有实线外键才会写进 DDL——这点和 DBeaver 或 PowerDesigner 不同,得靠人工核对。


















