Navicat 17模型同步需明确方向、权限与协作机制:正向工程(模型→数据库)用于开发,逆向工程(数据库→模型)用于验证;必须启用对应数据库权限,同步前须预览SQL并检查风险;.nmodel需导出为可diff的XML纳入Git,由指定Owner审核后同步。
navicat 17 的模型同步不是“一键同步就完事”,它依赖明确的变更方向、权限控制和文件协作机制——团队出问题,八成卡在这三步里。
模型同步必须分清正向还是逆向工程
正向工程(模型 → 数据库)适用于新功能开发或结构重构:先在模型工作区调整表、字段、索引、外键,再同步到目标库。逆向工程(数据库 → 模型)适合接手遗留系统或验证生产环境真实结构:从已有库反向生成或更新当前模型文件。
两者不能混用。比如你在模型里删了一个字段,又同时在数据库里加了同名字段,直接点“同步”会触发冲突提示,Navicat 不会自动猜你想要哪边——它只比对差异,不替代决策。
- 正向工程前,确认目标库连接已启用
ALTER和CREATE权限(MySQL 至少需ALTER, CREATE, INDEX) - 逆向工程前,确保数据库用户有
SELECT权限访问information_schema(PostgreSQL 对应pg_catalog) - 同步操作默认不执行 DDL,而是先弹出预览窗口;务必逐条检查生成的 SQL,尤其注意
ALTER TABLE ... DROP COLUMN或MODIFY COLUMN是否带数据丢失风险
.nmodel 文件必须纳入 Git 管理,但不能直接 diff
Navicat 17 生成的 .nmodel 是二进制文件,Git 无法显示结构级变更(比如哪个字段类型改了)。强行提交只会让团队看到“文件已修改”,却看不到改了什么。
正确做法是启用 Navicat 内置的「导出为 XML」功能:右键模型工作区 → Export Model to XML...。生成的 .xml 文件可被 Git 原生 diff,字段增删、关系变更、注释修改都能清晰呈现。
- 建议将
.nmodel和对应.xml文件放在同一目录,命名保持一致(如order_model.nmodel+order_model.xml) - 团队约定:所有结构变更必须先提交
.xml,再由负责人执行同步;禁止跳过 XML 直接改.nmodel - CI 流程中可加入校验脚本:对比
.xml中的<column name="status">和目标库实际字段类型是否一致
多人协作时,模型工作区不能共享实时编辑
Navicat 17 本身不支持多人同时编辑同一个 .nmodel 文件——这不是 Bug,是设计限制。所谓“共享模型”,本质是通过 Navicat On-Prem Server 分发副本,而非协同编辑。
典型错误流程:A 修改了模型并同步到 On-Prem Server,B 拉取后本地编辑,C 同时也在改……结果三方的 .nmodel 文件彻底失联,差异无法自动合并。
- 推荐做法:指定一名 DBA 或架构师作为模型 Owner,所有变更 PR 必须经其 review
.xml后才允许同步 - On-Prem Server 上的模型对象,仅用于分发和存档,禁止直接在服务端编辑(拖拽、双击打开等操作均会生成本地副本)
- 使用
URI功能快速定位:右键模型 →Copy URI,发给同事可直接跳转到对应模型位置,避免“你改的是哪个版本?”的沟通成本
真正难的不是点同步按钮,而是让所有人理解:模型不是画图工具,它是结构契约。字段长度写死在 .xml 里,外键约束体现在预览 SQL 中,而团队对“谁有权改、何时改、改完怎么验”的共识,远比 Navicat 版本号重要。


















