免费工具

DBML 转 ER 图

粘贴 DBML,即可得到可以打开并编辑的 ER 图:表带有列和键,每个 Ref 画成列之间的连线,表组显示为框。可以手写 DBML,也可以使用从 SQL 或其他编辑器生成的 DBML。

示例输出

由 DBML 示例绘制的示例图表
试试示例网上商店

使用方法

  1. 粘贴或拖入 DBML

    .dbml 文件或从其他编辑器复制的 DBML 都可以,包含 Project、Enum 和 TableGroup 块也没问题。注释和示例记录可以留在文本中。

  2. 查看表、Ref 和分组

    每个 Table 会变成一张带有列的卡片,每个 Ref 会变成一条从外键列指向被引用列的连线,每个 TableGroup 会变成一个框。

  3. 在 Archboard 中打开

    保存为新图表后,可以重新排列、添加注释、分享链接,或导出为 SVG 和 PNG。注册只需 Google 或 GitHub 账号。

会从 DBML 中绘制哪些内容

图表根据 DBML 的以下部分生成:

  • Table

    每个 Table 都会成为一张卡片,每列一行:列名、类型以及 PK 和 UK 标记。允许 NULL 的列会在类型后加一个问号;在 DBML 中,凡是没有设置 not null 且不属于主键的列都是如此。用 as 写的别名,无论在哪个 Ref 中使用都会被解析。

  • Ref<>-<>

    长格式、短格式和内联写法的 Ref:< 表示一对多,> 表示多对一,- 表示一对一,<> 表示多对多,用鸦脚记法的端点画出。复合 Ref 和跨模式 Ref 都支持,inactive 的 Ref 画成虚线。

  • indexespkunique

    来自列设置或 indexes 块的主键,包括 (order_id, line_no) [pk] 这样的复合键。唯一列会标为 UK,无论是在列上设置,还是通过单列唯一索引指定;跨多列的唯一索引和普通索引不添加标记。

  • TableGroup

    TableGroup 块会画成包住其中表的框。属于某个分组的表,即使它的模式有自己的框,也会留在分组的框中。

  • schema.table

    sales.orders 这类带模式限定的名称;DBML 使用多个模式时,按模式分别归入各自的框。

  • TablePartial~partial

    用 ~名称 注入到表中的 TablePartial 块,让 id 或时间戳这类共用列出现在每个使用它的表中。表中直接写出的列优先于 TablePartial 中的同名列。

DBML 图表不包含的内容

  • 注释:表和列的注释、项目注释以及便签式 Note 块会被跳过并计数。
  • 用 use 和 reuse 进行的导入。粘贴的文本无法跟随到其他 DBML 文件,因此这些行会带着警告被跳过,指向那些文件中表的 Ref 也不会画出。
  • 颜色:表上的 headercolor,以及 Ref 和分组上的 color。卡片和连线使用 Archboard 的默认样式。
  • 包含示例行的 Records 块,以及 DiagramView 和 Dep 块。数据不会被读取。

DBML 常见问题

其他工具的 DBML 能用吗?

可以。DBML 是一种开放语言,最初为 dbdiagram.io 设计;在那里编写、从那里导出,或用 DBML CLI 的 sql2dbml 命令生成的文件都能同样读取。颜色等 Archboard 不使用的设置会被跳过,不会报错。

TableGroup 如何显示?

每个包含表的 TableGroup 都会成为一个框,表放在框内,且优先于模式框。DBML 使用多个模式时,不属于任何分组的表会放在各自模式的框中。分组的颜色和注释不会使用。

可以为导入了其他 DBML 文件的项目生成图表吗?

请把这些文件依次粘贴到同一个文本框中。use 和 reuse 行会带着警告被跳过,粘贴文本中的所有表和 Ref 都会画出。由于工具只读取你提供的文本,导入不会被自动跟随。

在 Archboard 中打开图表时会保存什么?

预览不会被保存。选择“在 Archboard 中打开”后,绘制出的图表,包括表卡片、列名和类型、分组框以及连线,会作为新图表保存到你的工作区中。之后对 DBML 的修改不会更新它。

DBML 转 ER 图工具免费吗?

是的。粘贴 DBML 和查看图表无需账号。在 Archboard 中打开图表需要一个免费账号。

一分钟打开画布

使用 Google 或 GitHub 登录。单席位免费,团队加入后再升级。