📌 项目地址:drawdb-io/drawdb | ⭐ 38,584 颗星 | 🔧 JavaScript | 📜 未标注
一个老问题
改过老项目的人都碰过这种局面:ER 图放在 draw.io 里,CREATE TABLE 散在 migration 文件里。加了一个字段,图没动;删了一个外键,图上还画着。两边都对不上,也没人知道哪边是真相。
drawDB 的做法是砍掉一边。它是一个跑在浏览器里的数据库实体关系图(ERD)编辑器,表结构画出来,SQL 自动生成。打开 drawdb.app 就能用,不用注册账号。项目 38584 颗星,JavaScript 写的。
它能做什么
README 列的能力我挑几条实际说:
正向:画图生成 SQL。 在画布上放一张表,填字段、类型、约束,SQL 预览实时刷新。改一个字段的非空约束,导出语句马上跟着变。表之间连线对应外键,导出时会写成 FOREIGN KEY,不是画着好看的。
逆向:导入 SQL 脚本。 把一份数百行的建表脚本喂进去,表和关联铺成一张图。接手旧库的时候,这比在脚本里逐行翻 FOREIGN KEY 声明快得多。
生成迁移脚本。 图改了之后数据库怎么跟上,这一步它也管。
编辑器本身可以自定义。有一个限制要留意:具体支持哪些数据库方言,README 没写。我试的都是基础操作,存储过程、触发器、分区表这类复杂对象能不能处理,用之前自己验证。
三种部署方式
不想用官方站点,README 给了本地开发:
git clone https://github.com/drawdb-io/drawdb
cd drawdb
npm install
npm run dev
生产构建把最后一步换成 npm run build。
Docker 是两条命令:
docker build -t drawdb .
docker run -p 3000:80 drawdb
跑起来访问本机 3000 端口。
架构上要知道的一件事
drawDB 默认没有中央服务器,设计文件存在浏览器本地。好处是数据不出本机、零门槛;代价是没有分享链接。
README 对这点写得不含糊:要启用分享,需要单独部署 drawdb-server,并按 .env.sample 配置环境变量。这一步可选,画图、导出 SQL、生成迁移全程用不到它。
所以它的定位很清楚:个人工具。多人实时协作、权限管理不在默认能力里。团队想统一采用,先算一下维护 drawdb-server 的成本,别默认开箱就有。
我的判断
适合两类人:一是个人项目开发者,画完图导出 SQL,省掉手写语句的拼写错误;二是教学场景,浏览器里点几下,学生能看到每次改动对应的 SQL 变化。
不适合需要多人编辑同一张图、或者要走严格审批流程的团队,那套东西要么不存在,要么自己搭。
想参与开发看仓库的 CONTRIBUTING.md,问题可以去 Discord,README 里有链接。