navicat 15 不支持物理模型到逻辑模型的自动转换,所谓“view as logical”仅切换显示样式,不改变模型本质;必须新建逻辑模型(.mld),手动迁移语义、统一逻辑类型、重绘关系并验证。
navicat 15 不支持直接将物理模型“转换”为逻辑模型——它没有「physical → logical」的单向转换入口,所谓“改视图模式”只是切换显示样式,不会剥离数据库特有语法或还原抽象语义。
为什么点“View as Logical”不等于真逻辑模型
在 Navicat 15 的物理模型窗口右键 → View as Logical,只是临时隐藏了字段精度、存储引擎、AUTO_INCREMENT、CHECK 约束等物理细节,界面看起来“干净”了,但底层仍是物理模型结构:
- 主键仍带
AUTO_INCREMENT或SERIAL标记,逻辑模型本不该关心这些 -
VARCHAR(255)不会自动缩成泛义的String,TIMESTAMP WITH TIME ZONE也不会变成DateTime - 外键约束名(如
fk_order_user_id)保留在属性里,而逻辑模型只应体现“Order belongs to User”这种关系语义 - 模型文件后缀仍是
.mpd(physical model),不是.mld(logical model)
真正生成可用逻辑模型的唯一路径
必须从头新建逻辑模型,并手动迁移核心语义——这不是偷懒能绕过的步骤:
- 菜单栏选
File → New Model → Logical Model,别用“转换”按钮 - 把物理模型里的表拖成实体(Entity),字段拖成属性(Attribute),删掉所有数据库专属修饰(如
NOT NULL DEFAULT '') - 关系线要重画:右键连线 →
Edit Relationship→ 明确设置基数(1:N/M:N),不能只靠外键字段推断 - 字段类型统一改为逻辑类型:
String、Integer、Boolean、DateTime,别留TINYINT或JSON - 保存为
.mld文件后,再右键 →Validate Model,确保无主键缺失、空格命名、未设基数等硬性报错
物理模型里已有内容怎么高效复用
与其强行转换,不如把物理模型当参考源,批量提取结构骨架:
- 在物理模型中全选表 → 右键 →
Copy,然后粘贴到新逻辑模型画布——Navicat 会自动创建同名实体,但字段需逐个删精度、改类型 - 用
Export → To SQL File导出建表语句,再用正则批量替换:VARCHAR\(\d+\)→String,INT\(\d+\)→Integer,TINYINT\(1\)→Boolean - 如果原物理模型是从数据库逆向工程来的,可先在
Model → Model Properties → General里把Type改成Logical,但这只是元信息标记,不改变内容,仍需人工清理
同步修改时最易忽略的断裂点
很多人以为改完逻辑模型就能反向导出物理模型,结果字段对不上——问题常出在三个隐性脱节处:
- 逻辑模型里的
Description字段(用于生成 SQLCOMMENT)和物理模型里的Comment属性是两套存储,改一个不会同步另一个 - 物理模型中通过
Indexes标签页建的索引,在逻辑模型里必须用Add Index重新定义,否则正向工程时不会生成CREATE INDEX - 外键关系在逻辑模型中依赖
Relationship对象,在物理模型中依赖字段级FOREIGN KEY定义,二者名称、是否启用参照完整性(Enforce Referential Integrity)必须严格一致,否则导出 SQL 会漏约束
说到底,逻辑模型不是物理模型的“简化视图”,而是另一层抽象。想跳过语义提炼直接映射,最后总得在 Validate Model 报错里一行行补主键、删空格、设基数——那不如一开始就按逻辑模型的规则来建。











