ER图协作三大痛点及解法:分页需对齐物理边界而非屏幕;链接404源于存储权限、渲染地址或CSP拦截;Git不可diff因二进制保存,应改明文XML或Mermaid源文件,并用CLI自动同步DDL变更。
导出 ER 图时分页错乱、内容被截断
分页不是靠截图或手动拉伸解决的,核心是让绘图工具理解逻辑边界。多数团队用 draw.io 或 dbdiagram.io 生成 er 图,但直接“打印”会把一张大图硬塞进 a4,字段重叠、连线飞出页面。
- 在
draw.io中,先点右上角Arrange → Layout → Page Breaks → Show Page Breaks,再拖动实体框对齐虚线——不是对齐屏幕,而是对齐每页的物理边界 -
dbdiagram.io不支持原生分页,得先导出为.svg,再用浏览器打印时勾选Background graphics和Headers and footers关闭,否则页眉页脚挤压内容 - 如果用
Mermaid(如 VS Code 插件),erDiagram本身不支持分页,必须拆成多个子图,用subgraph包裹不同模块,再分别导出
共享图纸链接一打开就报 404 或权限错误
这不是链接失效,而是协作平台的访问策略没对齐。常见于 draw.io 存 Google Drive、dbdiagram.io 存 GitHub Gist、内部用 Confluence 嵌入 SVG。
-
draw.io存 Google Drive 时,必须右键文件 →Get link→ 设为“任何拥有链接的人都可以查看”,仅“组织内可查看”在跨域协作中大概率 404 - GitHub Gist 的
raw链接(如https://gist.githubusercontent.com/xxx.js)不能直接当图纸链接用,它只返回 JSON 数据;得用https://dbdiagram.io/r/xxx这类渲染后地址 - Confluence 嵌入 SVG 时,若图里含
<script>或外部字体引用,会被默认 CSP 策略拦截,表现为白屏——删掉 SVG 中所有<script>和font-family属性最稳妥
ER 图改了,但 Git 提交记录看不出结构变化
文本格式决定能否 diff。二进制文件(如 .drawio 默认保存为压缩 XML)或图片(.png)在 Git 里等于黑盒,改了 1 个外键也显示为“binary files differ”。
-
draw.io要关掉File → Preferences → Compress diagrams,强制存为明文 XML,Git 才能逐行比对字段增删 - Mermaid 的
.mmd文件天然可 diff,但注意:同一张图里实体顺序调整、空行增减都会触发大量无关变更,建议约定团队统一用mermaid-cli+--sequence参数标准化输出 - 避免把生成的
.png或.pdf提交到主分支,它们该放进/docs/assets/并加.gitignore,只留源文件(.drawio/.mmd)进版本库
开发改了表结构,ER 图没同步,协作时各看各的版本
人肉更新图永远慢半拍,关键是要把 DDL 变更自动转成图源。不是“图驱动开发”,而是“开发驱动图”。
- PostgreSQL 用户可用
pg2mermaidCLI:执行pg2mermaid -h localhost -d mydb -U user > schema.mmd,再提交.mmd;MySQL 对应用mysql-mermaid - 如果用 Flyway/Liquibase,可在 migration 脚本末尾加钩子命令,每次
flyway migrate后自动生成新图并git commit - 警惕“自动即可靠”——DDL 里若含注释或特殊字符(如中文字段名未加反引号),
pg2mermaid可能解析失败,建议 CI 流程里加一步mermaid-cli --validate schema.mmd校验


















