Navicat 17模型设计器生成的是可同步、可逆向、带约束语义的逻辑模型,新建时须严格匹配目标数据库类型与版本(如MySQL 8.0),字段类型推荐仅基于命名惯例,外键需先保存主表再关联,注释需手动开启“在生成SQL中包含注释”选项。
navicat 17 的模型设计器不是“画完就完事”的草图工具,它生成的是可同步、可逆向、带约束语义的逻辑模型——直接决定后续正向工程能否成功建库。
点击「模型」按钮后,第一步必须选对数据库类型和版本
新建模型时弹出的对话框里,MySQL 8.0 和 MySQL 5.7 看似只差个版本号,但实际影响极大:前者支持 JSON 类型、隐式默认值行为变更、索引长度限制放宽;后者不支持这些。选错会导致字段类型列表缺失、外键语法报错,甚至同步时生成非法 SQL。
- 如果目标是部署到生产 MySQL 8.0 实例,就选
MySQL 8.0,别图省事选“通用” - PostgreSQL 用户注意:选
PostgreSQL 15才能启用GENERATED ALWAYS AS计算列支持 - 模型一旦创建,类型不可更改——删掉重来比后期硬改兼容性更省时间
拖拽建表时,“字段名”输入框会自动推荐类型,但不能全信
比如你输 user_id,Navicat 可能推荐 INT;输 created_at,可能推荐 DATETIME。这仅基于命名惯例,不考虑业务语义或版本差异。
-
created_at在 MySQL 5.6+ 应该用TIMESTAMP(自动初始化)而非DATETIME,否则无法设DEFAULT CURRENT_TIMESTAMP -
email字段若需索引前缀,VARCHAR(255)比VARCHAR(100)更安全——MySQL 5.7+ 对前缀长度限制更严 - 输入
is_active推荐TINYINT是对的,但记得手动勾选NOT NULL并设默认值1,否则导出 SQL 会缺约束
外键关系必须“先存主表,再连从表”,否则模型校验失败
这是最常卡住新手的点:在图表中把 orders 表拖到 users 表旁边,拉线建外键,但点击“验证模型”时提示 Table 'users' does not exist in model。
- 原因:Navicat 要求被引用的表(主表)必须已保存(即出现在左侧“对象列表”中),才能作为外键目标
- 操作顺序必须是:建好
users表 → 点击左上角保存按钮(或Ctrl+S)→ 再建orders表并设置外键指向users.user_id - 如果已经画好但没保存,右键该表 → 选择
保存表,而不是只点画布上的“保存模型”
模型里加注释≠导出 SQL 里有 COMMENT,得手动开开关
你在字段属性面板填了 注释,也写了表级 描述,但导出的 CREATE TABLE 语句里没有 COMMENT 子句——因为 Navicat 默认关闭该选项。
- 进入
模型工作区→ 点击顶部菜单工具→模型选项→ 勾选在生成的 SQL 中包含注释 - 这个设置只对后续导出生效,已生成的 SQL 不会自动补上,要重新执行“同步模型到数据库”或“导出SQL”
- PostgreSQL 用户额外注意:
COMMENT ON COLUMN是独立语句,不会塞进CREATE TABLE,而是追加在末尾
模型设计器的真正门槛不在拖拽动作,而在于每一步操作背后都绑定了目标数据库的语法契约。画得再漂亮,只要一个字段类型或约束没对齐真实环境,正向工程就会在 CREATE TABLE 那行崩掉。


















