数据库模型是你的应用的核心,描述数据表、数据类型、实体关系和约束,是项目开发阶段最重要的沟通手段。清晰的 ERD 可以便于团队理解需求,掌握应用的全貌。
初创项目
对于初创项目或者新的需求,能够正确的建立满足业务需求的数据模型是项目可以顺利迭代的关键因素。有了 DrawERD 这样的工具,可以让需求快速转换成可视化的 ERD,在团队成员间达成共识,不再需要反复去核对「类目和产品到底是一对多还是多对多关系?」这种经常被忽略但又特别关键的信息。
遗留项目
对于遗留项目,一般业务已经非常稳定,但新人刚加入团队,面对几百张表的业务系统往往摸不到头脑。有了 DrawERD,新人可以快速的了解项目数据关系,对应用有系统性的认识。 如果你的数据库已经有几百张表,打算从单体应用向微服务迁移,那么 DrawERD 的分组功能是一个最佳工具,通过对模块的分组模拟,你可以清晰的判断哪个实体放到哪个服务更合理。
上图是 DrawERD 的核心特性,相比市面上流行的建模工具,做了很多 tradeoff,下面来说一下每个决策的理由:
欢迎试用/反馈/吐槽/建议
update: 添加了 download 和 share svg 功能
添加了 mysql 的导入
添加了根据列名规则自动生成 relation 功能
https://help.drawerd.com/table/import-table 目前只支持 pg dump 的导出导入 未来会支持 mysql 的 基于框架的容易支持 但各种框架太多了 不如直接做 DDL parser 来的直接
其实这个是技术债 目前没有什么工具可以解决 如果有外键约束可以自动关联 ps 这种表多的项目切换到 simple mode 好一些
RoR 框架搭的比较好,感觉换 java spring 这种,早就没法维护了(连 schema、migration 都可以没有
java spring 框架弱,外加想怎么写就怎么写,所以才要微服务(故意黑 java 和 java spring
不过 300 个表,感觉也需要考虑切一切了。
java 可以使用 https://flywaydb.org/ 我一个朋友在阿里做 java 开发,据说他们的 migration 不像 rails 那样在本地跑,他们本地开发都直接连平台的库,然后 migration 是平台提供的 web 界面,效果类似 rails 的 migration。
drawerd 这个项目也打算尝试一下做 migration 管理,给 non-rails 项目使用
只要 DBA 有说话的份量并且需要 DBA 做 SQL 审核(特别是跟性能相关的),那么像 MyBatis 这种把原始 SQL 统一放到一处方便 DBA 查看的框架就一定不会消失的,开发语言能写出再好的 DSL,也难说服 DBA 去学习一个新东西,SQL 才是数据库最简洁的语言
做 Java 的项目一般都是人员配置齐全,什么 DBA、架构师的,所以很多看起来很原始的方式是有原因的...
在滴滴也是 web 界面。但想看表结构,还是得连上某个环境的数据库去看。。。
界面这种,都是大家自己提交自己的,没办法知道数据库有哪些改变。RoR migration 可以都写到代码里,直观方便些。开发体验好一些。
不过既然都用 Java,还谈什么开发体验呢。。。
恩,确实是
也和经验有关,确实很多人喜欢 sql。ORM 也一直受到到各种各样的质疑。
一个 Java 项目想要转起来,需要 n 个人。。。RoR 一个人就搞定了。。。
ActiveRecord 至少可以解决 99% 的问题,但很多人还会揪着那 1% 不放。
就像
也难说服 DBA 去学习一个新东西
有的时候观点会受到经验影响。
Xmind 这个产品我觉得还是挺好用的,就是要收费。操作也比较简单,通过 space 键就能够方便地创建节点,也有不少好看的主题可以选择。我在公司还是主要做前端开发,比较少用它来画数据模型图,我找几个知情人来给你说说体验 @yfractal @shallmentmo @zhengpd 。
xmind 就是一个典型的脑图工具,简单好用,macos 用 xmind zen/2020 版本纵享丝滑。对于新项目设计 model 结构还是很方便的。对于历史项目导入 sql 结构这部分倒是没有研究过。另外 xmind 不支持团队协作编辑。
drawerd 对标的更像是 https://processon.com 。
setapp 是个好东西,可惜只有 xmind 8,没有 xmind zen。setapp 如果用到其中五个以上应用一般都值回订阅费用了。https://setapp.com/apps
processon 好像不支持 erd,drawerd 更类似 https://www.lucidchart.com/ xmind 似乎万能,看有 PM 用来提需求,没想到还可以画 ERD...
如果单纯的做 erd 的话,其实不需要导出数据库,只需要导出 information_schema 下面的表就行了 也不需要 ddl parser,毕竟那个蛋疼的要死............ 或者你可以自己做个 storage less 的 db 前端
不愧是 xmind 老司机。不过用 xmind8 我觉得界面上还是没有最新的那个舒服 。我只是用来临时画了个对象继承图,没有太深入去用。
只能 mysql 并且单机用还是有点不方便,drawerd 的目标是协同工具,比如可以生成 svg url 分享到项目管理工具里:
ps. ruby-china 还不支持插入 svg 图片
rails-erd 那个 gem 其实挺不错,问题是如果整个项目都生成之后,一个大的 pdf 几乎没法看,所以 drawerd 引入了分组功能,可以按模块去标记,然后按模块过滤出来一个小的 ERD
试用过,目前来说应该是同类中做的比较好的,唯一我觉得不太满意的地方是那个画布其实很难用,在画布上拖动实体框来生成一个美观的 ER 图,这个难度和华容道类似,等我把 @liprais 说的从 information_schema 里提取数据表和外键的功能加上之后,会比 dbdiagram 好用很多。
看了视频,如果是面向开发人员,其实类似 dbdiagram 左侧代码调整会更加直观,dbdiagram 的那个画布太难用了,还不如自己在 https://www.lucidchart.com/这种画个框来的方便
我觉得所有画框的问题是 如果你的项目上了点规模,一般大项目 300-500 张表,中等也得 100+ 吧,画框就是灾难,左侧那个 DSL 挺酷,但也有一些门槛,语法记住的难度和你记住 SQL DDL 语句差别不大
增加了根据列名称 自动产生关系的机制,应该方便很多了。
users.account_id -> accouts.id
mysql 导入也支持了:https://help.drawerd.com/importing/importing-mysql
没想好交互怎么做,其实最近想把 rails-erd 那个 gem 改一下,配置一下 drawerd 的 api key,就可以直接把表和关系传到 drawerd 上