ER Diagram (SQL → ER)
经典 Chen 风格 ER 图 +(按需)Word 三线表 / Mermaid / GoJS。
触发条件
在以下情况使用:
- 用户提供
.sql/ 粘贴CREATE TABLE,并要求出图或设计文档 - 用户明确要求:ER 图 / ERD / SQL转ER / 数据库设计文档
- 用户用自然语言描述业务并要求「设计表结构并画 ER 图」(由当前模型设计 list-of-tables,不要调用 yanleaf 的 AI 接口)
不要在仅讨论 SQL 语法、改某一个字段时自动出图。
产出什么(按需,不要默认全出)
只生成用户要的东西。 未点名的格式不要跑、不要塞给用户。
| 用户说法 | 生成 |
|---|---|
| 画 ER 图 / 生成 ERD / 看看图 | 仅 PNG(--format png) |
| 要 Mermaid / 要代码块图 | 仅 Mermaid(--format mermaid) |
| 数据库设计文档 / 三线表 / Word / docx | 仅 Word(--format word) |
| GoJS / 给前端用的 JSON | 仅 GoJS(--format gojs) |
| 全部 / 图和文档都要 / 导出全套 | --format all |
默认(只说「画个 ER 图」):PNG only。
不要默认执行 --format all。
SQL 路径
# 只要图(最常见)
python scripts/sql_to_erd.py schema.sql --out /tmp/erd --format png
# 只要 Word
python scripts/sql_to_erd.py schema.sql --out /tmp/design --format word
# 用户明确要全套
python scripts/sql_to_erd.py schema.sql --out /tmp/erd --format all
解析:优先 https://yanleaf.com/api/tools/er-diagram/parse,失败本地 sql_parser.py。
引擎:--engine auto(有 dot 用 Graphviz,否则 matplotlib)。一般无需改。
自然语言路径
- 按规范设计 list-of-tables(snake_case、主键、外键
xxx_id、审计字段、3NF)。 - 写入 JSON 后只渲染用户要的格式,例如只要图:
python scripts/render_chen.py /tmp/tables.json /tmp/erd.png yanleaf.com
只要 Word 则用 export_word.py,不要顺手再出 PNG/Mermaid。
关系与精简
- 外键所在表 = N,被引用表 = 1(不要画反)
- 字段很多或用户说「只要关系」:保留 PK + FK + 少量关键字段(
--max-attrs) - 用户说重画:按新要求再生成,仍只出其需要的格式
依赖(Python 3.9+)
pip install sqlparse pyyaml python-docx pillow matplotlib graphviz
Graphviz 系统包可选;没有也能出 PNG。中文需系统字体或 assets/ 内字体。
脚本
| 文件 | 作用 |
|---|---|
sql_to_erd.py |
SQL 入口(用 --format 控制产物) |
render_chen.py |
matplotlib Chen PNG |
api_client.py |
yanleaf parse API |
sql_parser.py |
本地解析回退 |
generate_erd.py |
Mermaid / GoJS / Graphviz DOT |
export_word.py |
Word 三线表 |
watermark.py |
Graphviz PNG 水印 |