产品推广 Draw ERD online

hooopo · April 12, 2020 · Last by hooopo replied at November 21, 2020 · 10232 hits

Why ERD

数据库模型是你的应用的核心,描述数据表、数据类型、实体关系和约束,是项目开发阶段最重要的沟通手段。清晰的 ERD 可以便于团队理解需求,掌握应用的全貌。

应用场景

初创项目

对于初创项目或者新的需求,能够正确的建立满足业务需求的数据模型是项目可以顺利迭代的关键因素。有了 DrawERD 这样的工具,可以让需求快速转换成可视化的 ERD,在团队成员间达成共识,不再需要反复去核对「类目和产品到底是一对多还是多对多关系?」这种经常被忽略但又特别关键的信息。

遗留项目

对于遗留项目,一般业务已经非常稳定,但新人刚加入团队,面对几百张表的业务系统往往摸不到头脑。有了 DrawERD,新人可以快速的了解项目数据关系,对应用有系统性的认识。 如果你的数据库已经有几百张表,打算从单体应用向微服务迁移,那么 DrawERD 的分组功能是一个最佳工具,通过对模块的分组模拟,你可以清晰的判断哪个实体放到哪个服务更合理。

Why not alternative?

上图是 DrawERD 的核心特性,相比市面上流行的建模工具,做了很多 tradeoff,下面来说一下每个决策的理由:

  • SaaS vs desktop tool:相比单机工具,能够团队协同是 DrawERD 的一个目标,你可以生成 url 嵌入到你的项目管理工具,ERD 的变更也会自动同步。
  • Auto layout vs Drawing on canvas manually:很多工具基于画布上的拖拽来编辑 ERD,这种方式看起来很酷,但是实际使用起来,如果你的应用达到几十张表之后,就是灾难。DrawERD 采用自动布局的方式,会根据你的实体和关系自动渲染出清新美观的 SVG 图,同时你可以选择 mode 和 layout 的组合进行渲染。
  • Database agnostic vs Database binding:一些工具需要依赖数据库连接去反向出数据结构,DrawERD 选择使用静态解析的方式,你只需要从你现有数据库导出 DDL 文件上传,对于新建项目,只需要界面上创建实体和关系,不依赖任何外键和数据库的元信息。

Roadmaps

  • Export from ERD to DDL
  • Auto generate GraphQL API:根据模型定义自动生成 GraphQL API endpoint,类似 firebase
  • ERD public hub:提供常用应用类型或模块(如:CRM、电商、财务等)的 ERD 模板

Demo && Screenshots

simple
full
group

欢迎试用/反馈/吐槽/建议


update: 添加了 download 和 share svg 功能


添加了 mysql 的导入


添加了根据列名规则自动生成 relation 功能

我下次让团队试试这个工具...

Reply to cqcn1991

ERD 对开发和分析师都有帮助

创建项目时的 Import from sql file 能支持 rails schema.rb 吗?

Reply to lifeixiong

https://help.drawerd.com/table/import-table 目前只支持 pg dump 的导出导入 未来会支持 mysql 的 基于框架的容易支持 但各种框架太多了 不如直接做 DDL parser 来的直接

导入所有表之后,建立关联关系步骤有点累😂

Reply to hjiangwen

目次有 300 个表 👍 ,有点可怕。

Reply to hjiangwen

其实这个是技术债 目前没有什么工具可以解决 如果有外键约束可以自动关联 ps 这种表多的项目切换到 simple mode 好一些

Reply to yfractal

300 个表以上可以称作大型项目了😂

Reply to lifeixiong

我这有个能根据 schema.rb 生成表关系图像的,schema_imageable

Reply to winse

看起来不错 有效果图吗

Reply to hooopo

RoR 框架搭的比较好,感觉换 java spring 这种,早就没法维护了(连 schema、migration 都可以没有

java spring 框架弱,外加想怎么写就怎么写,所以才要微服务(故意黑 java 和 java spring

不过 300 个表,感觉也需要考虑切一切了。

Reply to hooopo

😂 没,当时没传,现在不怎么方便去生成

Reply to winse

那个 rails-erd 也可以解析 railsmodel 的关联,但缺点是生成的大 pdf 几乎没法看,SVG 才是最实用的。

Reply to yfractal

java 可以使用 https://flywaydb.org/ 我一个朋友在阿里做 java 开发,据说他们的 migration 不像 rails 那样在本地跑,他们本地开发都直接连平台的库,然后 migration 是平台提供的 web 界面,效果类似 rails 的 migration。

drawerd 这个项目也打算尝试一下做 migration 管理,给 non-rails 项目使用

Reply to yfractal

只要 DBA 有说话的份量并且需要 DBA 做 SQL 审核(特别是跟性能相关的),那么像 MyBatis 这种把原始 SQL 统一放到一处方便 DBA 查看的框架就一定不会消失的,开发语言能写出再好的 DSL,也难说服 DBA 去学习一个新东西,SQL 才是数据库最简洁的语言

做 Java 的项目一般都是人员配置齐全,什么 DBA、架构师的,所以很多看起来很原始的方式是有原因的...

Reply to hooopo

在滴滴也是 web 界面。但想看表结构,还是得连上某个环境的数据库去看。。。

界面这种,都是大家自己提交自己的,没办法知道数据库有哪些改变。RoR migration 可以都写到代码里,直观方便些。开发体验好一些。

不过既然都用 Java,还谈什么开发体验呢。。。

Reply to hooopo

恩,确实是 😭

也和经验有关,确实很多人喜欢 sql。ORM 也一直受到到各种各样的质疑。

一个 Java 项目想要转起来,需要 n 个人。。。RoR 一个人就搞定了。。。

Reply to yfractal

其实现在 ORM 已经没那么弱了,大部分问题是使用 ORM 的开发者弱...

Reply to hooopo

ActiveRecord 至少可以解决 99% 的问题,但很多人还会揪着那 1% 不放。

就像

也难说服 DBA 去学习一个新东西

有的时候观点会受到经验影响。

几个管理员陆续发帖,社区再次兴旺的赶脚。😀 我司一般采用 xmind 来做数据库的数据模型。

Reply to lanzhiheng

体验怎么样

Reply to hooopo

Xmind 这个产品我觉得还是挺好用的,就是要收费。操作也比较简单,通过 space 键就能够方便地创建节点,也有不少好看的主题可以选择。我在公司还是主要做前端开发,比较少用它来画数据模型图,我找几个知情人来给你说说体验 😂 @yfractal @shallmentmo @zhengpd

Reply to lanzhiheng

setapp 包里带 xmind 了,很划算了

Reply to lanzhiheng

xmind 就是一个典型的脑图工具,简单好用,macos 用 xmind zen/2020 版本纵享丝滑。对于新项目设计 model 结构还是很方便的。对于历史项目导入 sql 结构这部分倒是没有研究过。另外 xmind 不支持团队协作编辑。

drawerd 对标的更像是 https://processon.com

setapp 是个好东西,可惜只有 xmind 8,没有 xmind zen。setapp 如果用到其中五个以上应用一般都值回订阅费用了。https://setapp.com/apps

Reply to hooopo

gitlab 已经在 ORM 这条路上不回头了,各种魔改强化😂

Reply to zhengpd

processon 好像不支持 erd,drawerd 更类似 https://www.lucidchart.com/ xmind 似乎万能,看有 PM 用来提需求,没想到还可以画 ERD...

如果单纯的做 erd 的话,其实不需要导出数据库,只需要导出 information_schema 下面的表就行了 也不需要 ddl parser,毕竟那个蛋疼的要死............ 或者你可以自己做个 storage less 的 db 前端

另外一个专业工具有的功能是可以自动根据字段名称去猜测主外键关系.....

Reply to liprais

导出 information_schema 和自动猜是两个不错的优化方向,感觉比 ddl parse 要简单

Reply to hooopo

如果你特别闲的话还可以导出统计信息...然后可以做的事情就多了。

Reply to hooopo

我的经验是不到万不得已不要用 parser,这东西典型的吃力不讨好.....

Reply to liprais

直接导出 schemainfo 到 json 应该容易多了

Reply to hooopo

先支持表导成 csv 好一些

我用 MySQL WorkBench, 也不错啊

Reply to zhengpd

不愧是 xmind 老司机。不过用 xmind8 我觉得界面上还是没有最新的那个舒服 🤐 。我只是用来临时画了个对象继承图,没有太深入去用。

Reply to lanzhiheng

好久没用了。。。用起来还是挺流畅的。不过 ror 可以根据 model 生成 ERB。

Reply to suupic

只能 mysql 并且单机用还是有点不方便,drawerd 的目标是协同工具,比如可以生成 svg url 分享到项目管理工具里:

ps. ruby-china 还不支持插入 svg 图片

Reply to yfractal

rails-erd 那个 gem 其实挺不错,问题是如果整个项目都生成之后,一个大的 pdf 几乎没法看,所以 drawerd 引入了分组功能,可以按模块去标记,然后按模块过滤出来一个小的 ERD

Reply to hooopo

可以传 SVG 了

https://dbdiagram.io/

这个呢?他也支持 rails 的 schema.rb 的导入

Reply to sanvi

试用过,目前来说应该是同类中做的比较好的,唯一我觉得不太满意的地方是那个画布其实很难用,在画布上拖动实体框来生成一个美观的 ER 图,这个难度和华容道类似,等我把 @liprais 说的从 information_schema 里提取数据表和外键的功能加上之后,会比 dbdiagram 好用很多。

Reply to hooopo

看了视频,如果是面向开发人员,其实类似 dbdiagram 左侧代码调整会更加直观,dbdiagram 的那个画布太难用了,还不如自己在 https://www.lucidchart.com/这种画个框来的方便

Reply to sanvi

我觉得所有画框的问题是 如果你的项目上了点规模,一般大项目 300-500 张表,中等也得 100+ 吧,画框就是灾难,左侧那个 DSL 挺酷,但也有一些门槛,语法记住的难度和你记住 SQL DDL 语句差别不大

Reply to hjiangwen

增加了根据列名称 自动产生关系的机制,应该方便很多了。

users.account_id -> accouts.id

mysql 导入也支持了:https://help.drawerd.com/importing/importing-mysql

Reply to hooopo

赶紧体验以下😁

帮助链接错了

Reply to hjiangwen

thanks,已修,但是 github 挂了,没发布...

Reply to hooopo

哈哈,我也是趁 github 挂了,来逛以下 ruby china

能不能批量把多个表放到一个组中,现在只能在“表”的表单中修改它所在的“组”

Reply to hjiangwen

没想好交互怎么做,其实最近想把 rails-erd 那个 gem 改一下,配置一下 drawerd 的 api key,就可以直接把表和关系传到 drawerd 上

为啥一张“表”只能在一个“组”里,不能分配到多个“组”么

Reply to hjiangwen

理论上可以 但我没想到这个需求的应用场景 就没做成多对多

本来设想的场景是用来划分微服务的参考 一个表只能属于一个服务

Reply to lifeixiong

支持了通过 rails-erd 导入 https://github.com/drawerd/drawerd

我都是用 JPA 写好 Entity。然后在 IDEA 里查看模型。

超过 20 个表之后,看着比较累了😂 图形变的都太小了

表很多的时候,需要一个搜索表的功能 好吧,可以使用浏览器本身的搜索

Reply to fresh_fish

右下角有一个 zoom 功能 或者使用 simple mode

Reply to hooopo

还是需要一个搜索定位。。。

Reply to fresh_fish

好吧

Reply to hooopo

我又来了,删除 500....😂 正在重度使用

Reply to fresh_fish

搜索定位那个没太理解你的需求 加个微信啊 hooopo

Reply to hooopo

加了

hooopo in 分享一个 DB Doc 工具 mention this topic. 21 Jun 07:52
You need to Sign in before reply, if you don't have an account, please Sign up first.