Apache License 2.0

技术解读

以下内容由 GitRead 中文社区 编辑团队基于项目 README 与官方资料整理, 结合中文开发者的常见使用场景补充技术选型建议。具体以项目官方文档为准。

Liam:把 ER 图从"事后补画"变成"自动化产物"

项目背景与痛点

数据库 schema 的文档化,一直是团队协作里那笔没人愿意承认的隐形债。表结构散落在 migration 文件、ORM 模型和 DBA 的口头约定中;新人接手一个几十张表的老库,第一件事往往是打开 dbdiagram.io 手工画图,或者对着 pgAdmin 一张表一张表地双击。真正的麻烦在于:图一旦画出来,就开始过时。schema 加了一列、改了外键,图不会自己更新,几个月后它反而成了错误信息的来源。

传统方案有三条路:手工画图,好看但不可维护;SchemaSpy / pgAdmin 自动生成,可维护但页面难看,没人愿意点第二次;DBML / dbdiagram 这类 DSL,需要额外维护一份定义文件,又多了一个会过时的源头。Liam 押注的是第四条路:直接以数据库 schema 本身作为唯一可信来源,自动产出既好看又可信的 ER 图,并把它接进 PR 流程里。

核心技术揭秘

Liam 的定位是“schema 可视化引擎”,不是画图 GUI。这决定了它的架构是典型的解析 → 建模 → 布局 → 渲染四段流水线,全部用 TypeScript 实现,并以 monorepo 拆成 db-structure、erd-core、cli 等独立包,方便被其他工具复用。

关键取舍有两个。第一,解析层不依赖数据库连接。Liam 主要面对 PostgreSQL,做法是直接对 DDL / schema 导出文件做静态解析:它把 PostgreSQL 官方的解析器(libpg_query 系)接入运行时,拿到真正的 AST,而不是用正则去“猜”表定义。这保证了 CREATE TABLE、ALTER TABLE、COMMENT ON、CREATE TYPE 等语法的准确性,也避开了“要不要连生产库”这个安全问题。第二,布局交给算法。ER 图的难点从来不是画框,而是自动排版:几十张表、上百条外键,节点重叠和连线交叉会让图彻底不可读。Liam 使用 ELK.js 的 layered 布局,以外键方向作为分层约束,再配合局部优化,这也是它“看起来像人画的”的主要原因。

渲染层基于 React Flow(XYFlow),意味着图是 DOM 而非静态 SVG 快照:节点可拖拽、可聚焦、可高亮上下游链路——代价是表规模很大时会遇到明显的性能上限。

graph TD A[数据库 DDL / Schema 导出] --> B[libpg_query 解析成 AST] B --> C[归一化为统一 Schema 模型] C --> D[表 / 列 / 外键 / 注释提取] D --> E[ELK.js 分层自动布局] E --> F[React Flow 渲染交互式画布] F --> G{"输出形态"} G -->|"CLI 本地"| H[导出静态 HTML / 图片] G -->|"GitHub App"| I[在 PR 中发布 ER 图 Diff] C --> J[Schema 快照与版本对比] J --> I

功能亮点与差异

最值得说的不是“自动生成”,而是 PR 级别的 schema 变更可视化。Liam 提供 GitHub App 与 CLI,能在 pull request 里贴出“这次改了哪些表、加了哪些列、新增了哪条外键”的图对比。把 schema diff 从文本 diff 变成图 diff,这件事 dbdiagram 和 SchemaSpy 都没有认真做,而对做 code review 的团队来说,它的价值远大于一张漂亮的静态图。

其次是单表聚焦与关联链路高亮。真实项目里没人能一眼看完 200 张表,Liam 支持按表聚焦、沿外键展开上下游,比“全量大图”更贴近日常使用。

第三是可嵌入。erd-core 是独立包,理论上可以塞进自己的后台管理系统或文档站,做一个“实时 schema 视图”——这是纯粹的 SaaS 画图工具给不了的。

应用场景与落地建议

适合:中大型 PostgreSQL 项目的 schema 文档化;需要 review migration 的团队;接手遗留系统时的快速摸底。

生产使用要注意几点。其一,解析质量取决于你提供的 schema 文件是否完整——只给一张表的 DDL,图就只有一张表;\d+ 导出顺序、分区表、继承表这些边界情况要提前验证。其二,大库性能:几百张表以上,交互式渲染会明显变卡,建议按业务域拆成多个入口图,而不是硬扛全量。其三,别把 Liam 当 schema 的“守护者”——它只做可视化,不做约束校验与漂移检测,真正的唯一可信来源还得是 migration 工具。

综合评价

优点:设计边界清晰,"解析"与"展示"解耦得干净;布局质量在开源方案里属于第一梯队;PR 集成这个切入点非常务实;TypeScript 全栈,二次开发门槛低。

缺点:PostgreSQL 之外的数据库支持明显偏弱,MySQL / SQLite 的解析能力不在同一水平;生态年轻,API 稳定性还在打磨期;重度依赖 React Flow 的 DOM 渲染,超大 schema 场景需要用户自己想办法降低复杂度。

一句话:如果你要的是“能自己更新、review 时能看、同事不会嫌弃”的 ER 图方案,Liam 目前是开源里最接近答案的那个;但如果你的项目横跨多种数据库,或者要求图能稳定嵌进大型系统,建议先做个 POC 再决定。

关于

GitHub 原始描述(英文)

Automatically generates beautiful and easy-to-read ER diagrams from your database.

描述取自 GitHub 官方 API,保持仓库作者书写的原文。

语言占比

CSS
HTML
Handlebars
JavaScript
MDX
Ruby
Shell
TypeScript

Release

README

Liam ERD Liam ERD

Automatically generates beautiful and easy-to-read ER diagrams from your database.

DeepWiki Follow us on X, formerly Twitter

liam-hq%2Fliam | Trendshift

demo

Website • Documentation • Roadmap

What’s Liam ERD?

Liam ERD generates beautiful, interactive ER diagrams from your database. Whether you’re working on public or private repositories, Liam ERD helps you visualize complex schemas with ease.

  • Beautiful UI & Interactive: A clean design and intuitive features (like panning, zooming, and filtering) make it easy to understand even the most complex databases.
  • Simple Reverse Engineering: Seamlessly turn your existing database schemas into clear, readable diagrams.
  • Effortless Setup: Get started with zero configuration—just provide your schema, and you’re good to go.
  • High Performance: Optimized for both small and large projects, easily handling 100+ tables.
  • Fully Open-Source: Contribute to the project and shape Liam ERD to fit your needs.

Quick Start

For Public Repositories

Insert liambx.com/erd/p/ into your schema file’s URL:

# Original: https://github.com/user/repo/blob/master/db/schema.rb
# Modified: https://liambx.com/erd/p/github.com/user/repo/blob/master/db/schema.rb
                  👾^^^^^^^^^^^^^^^^👾

For Private Repositories

Run the interactive setup:

npx @liam-hq/cli init

Jack If you find this project helpful, please give it a star! ⭐
Your support helps us reach a wider audience and continue development.

Documentation

Check out the full documentation on the website.

Roadmap

See what we’re working on and what’s coming next on our roadmap.

Contributing

Refer to our contribution guidelines and Code of Conduct for contributors.

Contributors

Star History

Star History Chart

License

Liam ERD is licensed under the Apache License Version 2.0.

Licenses for third-party packages can be found in docs/packages-license.md.

评论

暂无评论