Navicat Premium 17 不支持模型垂直拆分重构,因其模型设计器仅用于ER图绘制与DDL生成,不解析语义、不推导归属、不执行迁移;所有字段拆分、建表、外键匹配均需人工完成。

Navicat Premium 17 没有「模型垂直拆分重构」功能,所谓“利用模型重构实现垂直拆分”是误读——模型设计器不支持从一张表中选中若干字段、一键提取为新表并自动建立外键关系。
为什么模型设计器无法完成垂直拆分重构
模型设计器本质是 ER 图绘制与 DDL 生成工具,它不解析字段语义、不推导业务归属、也不执行结构迁移。你不能在 student 表的字段列表里框选 phone、address、avatar_url 然后右键“提取到新表”。所有字段归属判断、新表命名、主外键匹配、约束迁移都必须人工决策和操作。
- 模型中拖拽连线仅用于定义逻辑关系,不会触发物理表结构变更
- “正向工程”(生成 SQL)只输出当前已建模表的
CREATE TABLE,不生成ALTER TABLE拆字段语句 - “逆向工程”(从库导入)只能读取现有表结构,无法识别哪些字段本该属于另一张表
能用模型辅助的三个实际动作
虽然不能自动拆,但你可以把模型当作“结构草图+DDL 控制中心”来降低出错率:
- 先在模型中手动新建目标子表(如
student_contact),完整复制待拆字段:注意NOT NULL、默认值、字符集、COLLATE必须与原表一致 - 在原表(
student)上右键 → 「编辑表」→ 将已拆出的字段设为NULL,否则后续插入会报错ERROR 1138 (22004) - 在模型中分别建立两条外键连线:
student.id→student_contact.student_id,以及student.id→student_profile.student_id(若还有第二张子表),确保「参照完整性」启用且字段类型完全匹配(包括UNSIGNED、ZEROFILL等隐式属性)
导出 SQL 前必须检查的四个技术断点
模型生成的 SQL 很容易在执行时报错,尤其当原表已有数据时:
-
UNIQUE或CHECK约束未同步迁移:比如原表有UNIQUE(email, phone),拆出phone后,这个联合约束必须在student_contact中重建,模型不会提示 - 触发器/存储过程硬编码字段名:模型不扫描 SQL 对象,
UPDATE student SET phone = ...这类语句必须人工 grep 修改 - 外键字段缺少索引:MySQL 要求外键列必须有索引,模型中即使设了外键,若未显式添加
INDEX,导出的 SQL 执行会失败 - JSON 或生成列类型不兼容:原表
profile_data JSON拆到新表后,若目标字段声明为TEXT,MySQL 5.7+ 会在 INSERT 时抛ERROR 3105 (HY000)
真正卡住进度的从来不是 Navicat 点几下鼠标,而是确认 updated_at 字段要不要随主表一起更新、created_by 是否该保留在主表、以及应用层所有 SELECT * 查询是否已改为明确字段列表——这些不在模型里,得翻代码。


















