必须人工核对四项配置:数据类型映射(string→varchar(255))、模式名、主键标注、多对多关联表生成;否则缺主键、外键或类型错误,因navicat不推断主键、不自动映射类型,仅机械落地逻辑模型已有标注。

不能直接“转换”,必须走「变换为物理数据模型」向导,并人工核对四项关键配置,否则生成的 SQL 在 MySQL 8.0 或达梦 8 上大概率报错。
为什么点“转换”后生成的表缺主键、外键或字段类型不对
Navicat 不推断主键,也不自动映射数据类型——它只按逻辑模型里已明确标注的内容机械落地。常见问题包括:
- 逻辑模型中实体未勾选
Primary Key,物理模型里就真的没有PRIMARY KEY约束 -
String属性默认映射为TEXT,但 MySQL/达梦不支持对TEXT建索引,应手动改为VARCHAR(255) - 多对多关系没在关系属性里勾选「创建关联表」,就不会生成
post_tag这类中间表 - 外键引用的表名大小写与目标库实际行为冲突(如 MySQL 默认
lower_case_table_names=1),导致Foreign key references invalid table
「变换为物理数据模型」向导里必须改的4个地方
进入向导后,别急着点“完成”。这四页配置漏一项,后续同步或建表就会失败:
- 在「数据类型映射」页:把
String→VARCHAR(255),禁用TEXT;DateTime显式设为DATETIME并勾选DEFAULT CURRENT_TIMESTAMP(若需) - 在「选项」页:填入准确的模式名(如
hr_schema),注意达梦不支持CREATE SCHEMA,PostgreSQL 则依赖它 - 检查每个实体的「主键」标注:右键实体 →「编辑实体」→「标识符」页确认
Primary Key已启用,且至少一个属性勾了Identity(如自增) - 检查每条关系线:右键外键连线 →「Edit Relationship」→ 确认
Referenced Table名与物理目标表名完全一致(包括下划线、小写)
生成SQL前必须手动打开「属性」视图看字段细节
默认图表视图只显示字段名,但长度、是否允许 NULL、默认值、自增属性全藏在「属性」面板里。漏看就会导出带 INT 却没 AUTO_INCREMENT 的主键,或 DATETIME 没默认值。
- 双击任意表 → 切到「字段」页 → 点顶部「属性」按钮(不是「详细信息」)
- 逐个检查字段的
Length/Scale、Allow Nulls、Default Value、Auto Increment - 特别注意外键字段:其类型必须与被引用字段**字节级一致**,比如都是
BIGINT UNSIGNED;MySQL 8.0+ 对此校验极严,不一致直接报错 -
Description(逻辑层注释)和Comment(物理层注释)不自动同步,改完逻辑模型后,得手动复制过去,否则导出的COMMENT为空
同步到数据库比执行SQL更安全,但有两个硬限制
「同步到数据库」会对比差异再变更,避免误删已有索引或数据,但它有不可绕过的前提:
- 目标库连接必须已激活,且当前用户拥有
CREATE和ALTER权限 - 若你在物理模型里改了字段名(如
user_name→username),同步默认走RENAME COLUMN,但达梦 8 和 MySQL 5.7 不支持该语法,会直接中断退出 - 同步前务必确认目标表引擎是
InnoDB(右键表 →「编辑表」→「选项」页设置),MyISAM 不支持外键
最常被跳过的动作是:改完逻辑模型后,没手动更新物理模型里的 Comment 字段,也没检查外键字段类型是否与被引用列完全一致——这两处不出错则已,一出就是上线前最后一刻的阻塞问题。











