表相关功能
表与备注创建之后的所有操作,包括选中、移动、复制、删除、着色,以及设置画布显示哪些内容,还包括围绕它们的画布控制。
先是表与备注的相关命令;然后是表属性、聚焦于表、索引与备用键、自动布局和数据库厂商;接着是画布本身:画布工具栏、缩放、平移与跳转的落点,以及 Diff Viewer;最后是只读编辑器对这一切保留了什么。
表分组是容纳表的框,有单独的一页介绍,参见表分组。
逻辑名和决定表显示哪些名称的名称显示也是如此,参见逻辑名。
多选
支持以下三种方式:
Ctrl + drag(Windows/Linux) 或⌘ + drag(Mac)Ctrl + click(Windows/Linux) 或⌘ + click(Mac)Ctrl + A或Ctrl + Alt + A(Windows/Linux),⌘ + A或⌘ + ⌥ + A(Mac)
备注的选中方式相同,两个全选快捷键都会一次性选中所有表与备注。通过 View Option → Memos 隐藏的备注既不会被全选,也不会被选择框选中,参见表显示选项。
在表分组的标题栏上 Ctrl + click (Windows/Linux) 或 ⌘ + click (Mac) 可以将其加入选中范围,但全选从不会选中表分组。
有文本光标时,Ctrl + A 会优先作用于光标所在的文本,因此在编辑单元格时它选中的是文本而不是图。
选择框覆盖到表或备注的中心时才会将其选中,仅接触边缘不会选中。只有当选择框包住表分组的整个框时才会选中该分组,因此在分组内部画出的选择框只会选中其中的表,而不会选中分组。
在已经选中的对象上右键点击时,整个选中范围都会保留,因此 Color、Group selected tables 和 Delete selected 等菜单条目会作用于所有选中的对象。在其他任何表、备注或表分组上右键点击时,即使按住了 Ctrl 或 ⌘,也只会选中该对象;在关系或空白画布上右键点击则会清除选中状态。
Escape 会清除选中状态。当单元格、备注或表分组名称的编辑器处于打开状态,或正在绘制关系或 New Table Group 时,第一次按 Escape 会结束该操作,第二次才会清除选中状态。
只读编辑器没有这些选中方式:那里只有跳转才会选中,参见只读编辑器。

在协同编辑会话中,每位参与者的选中状态、获得焦点的单元格和选择框都会以该参与者的颜色绘制在画布上。参见协同编辑。
当参与者使用的是另一种显示方式时,其获得焦点的单元格会绘制在你的显示方式中替代它的那个单元格上,例如其名称单元格会绘制在你的逻辑名单元格上,参见协作者。
移动多个表
拖动已经处于选中范围内的表或备注时,无需任何修饰键,整个选中范围都会一起移动。
表可以通过其表头或任意一个列行拖动,因此从列行开始的拖动移动的是表,而不是列。列则改为通过获得焦点的行旁边的拖动手柄移动,参见调整与移动列。
在表头单元格或列行上,只有当指针移动了一小段距离后表才会开始移动,因此在那里点击仍会让单元格获得焦点,双击仍会打开其编辑器。拖动永远不会从表的颜色边缘(它会打开选色器)、表头上的 + 和 x 按钮或列行的 x 开始。
拖动选中范围之外的对象时,选中状态会收缩到该对象上,只移动它。无论哪种情况,Ctrl + drag (Windows/Linux) 或 ⌘ + drag (Mac) 都会保留选中状态。
只有鼠标左键可以移动表与备注。右键点击只决定右键菜单作用于哪些对象,不会移动任何内容;用鼠标中键拖动则会平移画布,参见浏览画布。

选中的表分组也会一起移动,并带着其中的表移动;既被选中、又位于正在移动的分组中的表只会移动一次。
放下表的位置可能会把它移入或移出某个分组,参见添加与移除表。
表与备注共用同一个叠放顺序。用左键或右键按下某个表或备注时,它会移到其他所有表与备注的前面;按下表分组的标题栏或右键点击其主体时,该分组中的表会移到最前面。
该顺序不会被保存:重新打开的图会按文件中列出的顺序叠放表,所有备注都位于表之上。
复制/粘贴表与备注
复制选中的表与备注,并将它们作为新的表与备注粘贴出来。
快捷键:Ctrl + C (Windows/Linux) 或 ⌘ + C (Mac),Ctrl + V (Windows/Linux) 或 ⌘ + V (Mac)
复制的表会保留名称、逻辑名、注释、列和颜色,复制的备注会保留文本、尺寸和颜色。
复制的每一列都会保留其逻辑名,每个表名和列名也都会保留其是否由词典生成的状态,参见生成物理名。
粘贴的列只有在同时满足两个条件时才会保留其域关联:粘贴到的图中列有正是那个域(而不只是同名的域),并且该域的数据类型仍与复制该列时相同。否则,该列粘贴后不关联任何域,并保留复制时的类型,参见关联列。
索引和关系也会一并复制:索引会被完整复制到复制出的表上;关系则只有在其连接的两个表都在复制范围内时才会被复制,并会带上其类型以及 ON DELETE 与 ON UPDATE 操作。只有一端在范围内的关系会被丢弃,而不会保留指向原表的连接。
粘贴出来的副本会成为新的选中对象,重复粘贴同一份内容时每次都会再偏移 50px,因此多次粘贴不会相互重叠。
副本不会保留其所属的表分组:粘贴出来的表不属于任何分组,即使它落在某个分组的框内也是如此;选中的分组也不会被复制。
当 View Option → Memos 隐藏了备注时,粘贴仍会添加其中携带的备注,这些备注处于隐藏且未选中的状态,因此只有粘贴出来的表会成为选中对象。

当在获得焦点的表中选中了列时,相同的快捷键会改为复制这些列。参见编辑表。
创建表与备注的副本
按住 Alt 并用鼠标左键拖动表或备注。
表可以通过其表头或任意一个列行抓取,因此在列行上 Alt + drag 会创建表的副本,而不会改变列的顺序。在列的拖动手柄上按住 Alt 不会创建任何副本:该列会像普通的手柄拖动一样移动,参见调整与移动列。
半透明的预览会跟随指针移动,松开鼠标按键后副本会落在预览所在的位置。
如果拖动的对象已经属于某个选中范围,则整个选中范围都会被复制。否则选中状态会变为指针下的那个对象。
Alt + click 而不移动时,副本会落在右下方 50px 处,如果该位置已被占用则继续向右下方偏移。
副本携带的内容与粘贴相同:名称和逻辑名、注释、列、颜色和备注尺寸,以及完全落在复制范围内的索引和关系。由于副本仍在同一张图中,它会原样保留每一列的域关联。与粘贴一样,副本不属于任何表分组。
在表分组的标题栏上 Alt + drag 会像普通拖动一样移动该分组;永远不会为分组创建副本。

删除表与备注
删除选中的表、备注和表分组。
快捷键:
Delete或Backspace。它们会删除整个选中范围,但当唯一选中的对象是一个表、其中选中了部分列,并且缩放级别高于70%时除外:此时它们会改为删除这些列,参见删除列。Ctrl + Backspace或Ctrl + Delete(Windows/Linux),⌘ + Backspace或⌘ + Delete(Mac)。即使选中了列,它们也总是删除选中的表、备注和表分组。

右键菜单同样可以删除。当某个表或备注是两个或更多选中对象之一时,其菜单的最后一个条目会显示为 Delete selected,并删除整个选中范围;否则显示为 Delete,只删除该表或备注。在选中的列所在的行上,表的菜单会改为显示 Delete column 或 Delete columns,参见删除列。
删除表时,其关系与索引会随之一起删除。删除表分组时会保留其中的表,这些表将不再属于任何分组,参见删除分组。
删除前不会要求确认,每次删除都只算一步 Undo,在 readonly 编辑器中则不会删除任何内容。
按住 Delete 和 Backspace 不放时,它们只会删除一次,并且永远不会删除关系,参见编辑关系。在单元格、备注或其他任何文本框中输入时,它们会改为编辑文本。
设置中以 Delete Selection 列出这两个按键,参见快捷键。
表与备注的颜色设置
可以指定颜色,以便按类别区分。
表的颜色显示在其左侧边缘,备注的颜色则显示在其顶部。用左键点击该边缘或色条,或在表或备注的右键菜单中选择 Color,即可在指针处打开选色器。颜色会应用到所有选中的表、备注和表分组,而不仅仅是被点击的那一个。
表分组通过其自身菜单中的 Color 着色。位于已着色分组中的表会在表头上显示分组的颜色,同时在左侧边缘保留自己的颜色,参见为分组着色。

选色器从上到下依次包含:
- 饱和度与亮度区域,其下是色相滑块,旁边是颜色的预览。浏览器提供取色器时,滑块前会有一个吸管按钮
Pick a color from the screen,可以从屏幕上的任意位置取色。 Hex、R、G和B输入框。Hex接受 3、4、6 或 8 位十六进制数字,带不带#均可,也可以粘贴rgb()、hsl()或 CSS 颜色名称。完整的 6 位或 8 位值会在输入时立即应用,其他值则在按Enter或离开输入框时应用。R、G和B接受整数,大于255的值按255处理,并在按Enter或离开输入框时应用。选色器无法识别的文本会被丢弃。- 十六个预设色块,分为两行,每行八个:Red、Orange、Amber、Yellow、Lime、Green、Teal、Cyan、Blue、Indigo、Violet、Purple、Pink、Crimson、Brown 和 Gray。将指针悬停在色块上会显示其十六进制代码。
Document colors:文档中的表、备注和表分组已经使用的颜色,最多八种,使用最多的排在最前。只有存在这样的颜色时才会显示这一行。No color。
颜色始终是不透明的:选色器没有透明度控件,输入或粘贴的值所带的透明度也会被丢弃。
打开选色器不会改变任何内容,选择选中对象已有的颜色也不会新增一步 Undo。
No color 会在一步 Undo 内清除所有选中的表、备注和表分组的颜色,并关闭选色器。只要有任何选中对象带有颜色,表、备注和表分组的右键菜单中 Color 的正下方就会出现 Remove color,它的作用相同,但不会打开选色器。
选色器打开时会接管键盘,Tab 和 Shift + Tab 会在其控件之间循环移动。方向键会将区域和色相滑块移动 1,按住 Shift 时移动 10;在色块上,方向键会从一个色块移到另一个色块,并随之应用各个颜色。
选色器接管键盘期间,Undo 与 Redo、缩放快捷键、Search 以及 Toggle Explorer 仍会作用于编辑器,其他编辑器快捷键则不会:删除快捷键不会删除任何内容,Delete 和 Backspace 只会编辑 Hex、R、G 和 B 输入框中的文本。
Escape 会关闭选色器,在选色器之外的画布上按下也会将其关闭。
在资源管理器中按下不算在画布上按下,因此选色器会保持打开。在资源管理器中选择某一行会改变选中范围,之后选择的颜色会应用到新的选中范围。
表显示选项
提供以下显示选项:
- Table Comment
- Column Comment
- DataType
- Domain
- Default
- Not Null
- Unique
- Alternate Key
- Auto Increment
- Relationship
- Referential Actions
- Table Groups
- Memos
Domain、Unique、Alternate Key 和 Auto Increment 默认关闭,其余选项默认开启。
表显示哪些名称不属于显示选项:画布右键菜单中紧跟在 View Option 之后的 Name View 用于选择物理名、逻辑名或两者,参见切换显示方式。
Domain 会为每一列添加一个单元格,其位置由列顺序决定,显示该列所关联的域的名称。未关联 Domains 工作表中所列的任何域的列,会在该单元格中显示变暗的 domain 占位文字。该单元格在每种显示方式下都会显示。Domain 关闭期间,Logical Names 会改为在类型单元格中显示已关联的域的名称,参见域单元格。
Alternate Key 会标记每个备用键的列,例如 AK1.1,参见备用键。
Referential Actions 显示关系的 ON DELETE 与 ON UPDATE 操作在其连接线子表一端添加的 D: 和 U: 标签,参见读懂连接线。关闭它只会隐藏这些标签,不会移动任何表或连接线。
Table Groups 显示表分组,以及分组中各表表头上的分组颜色。关闭它会在画布、小地图和导出的图片中隐藏这些内容,不会移动任何表,每个表也仍留在其分组中,参见隐藏分组。关闭它还会从资源管理器中移除 Table Groups 文件夹,从画布工具栏中移除 New Table Group,资源管理器的搜索也不再查找分组名称。
Memos 显示备注。关闭它会在画布、小地图和导出的图片中隐藏所有备注,不会移动任何表或连接线。隐藏的备注不占用空间,因此滚动条、小地图和 Go to content 指南针都不会将其计算在内。
隐藏备注时会取消对它们的选中,并关闭已打开的备注编辑器。资源管理器会去掉其 Memos 文件夹,其查找与替换搜索和快速搜索的 : 都不会搜索它们。备注隐藏期间,右键菜单、画布工具栏、快速搜索和欢迎界面中都不再提供 New Memo,Alt + M 也不会添加备注。粘贴或 Import and Add 仍会添加其中携带的备注,这些备注处于隐藏且未选中的状态。
在只读编辑器中,这些开关仍然有效,但只作用于该屏幕:它们不会被保存、记录到 Undo 历史记录或共享,并且在编辑器再次变为可写时会恢复为文件的值,参见设置中的只读编辑器。

Visualization 标签页 Flow 模式中的卡片不遵循这些选项,包括 Domain:它们使用自己的行显示,并且即使关闭了 Relationship 也会绘制连接线。卡片排布哪些单元格仅取决于名称显示,参见卡片上的名称。
表属性
打开表的属性面板。
可以通过表的右键菜单中的 Table Properties 打开,此时打开的是你右键点击的表;也可以选中一个表后按 Alt + Space。
面板会在变暗的画布中央打开。只有画布会变暗,因此已打开的资源管理器会保持打开,并且可以在面板旁边继续使用。面板顶部包含 Table Properties 标题、以标签形式列出的最近打开的五个表(当前表会高亮显示),以及一个关闭按钮。每个标签都按名称显示的方式显示其表名。点击某个表的标签即可切换到该表,无需重新打开面板。
顶部下方有三个标签页:Indexes、Schema SQL 和 Code Generator。三个标签页共用同一尺寸的面板,因此切换标签页时面板不会移动,也不会改变大小。
可以通过关闭按钮、Escape 或点击面板外部的画布将其关闭。
在资源管理器中选择文件夹以外的行,或跳转到其搜索的匹配项时,会先关闭表属性再跳转。Ctrl + F (Windows/Linux) 或 ⌘ + F (Mac) 也会关闭表属性,该按键会打开资源管理器的搜索;资源管理器已经打开时,则把光标放入其查找输入框。在资源管理器中的其他任何点击(包括点击文件夹行),以及点击工具栏中的 Explorer 按钮,都会让表属性保持打开。键盘焦点位于资源管理器中时按下的 Escape 只会把键盘焦点交还给画布,因此需要再按一次 Escape 才能关闭表属性。
Indexes 标签页的介绍参见索引。
Schema SQL 标签页按所选数据库显示该表的 DDL:它的 CREATE TABLE、部分数据库为其 Unique 列单独写出的约束,以及它的索引。无论工具栏中的 Schema SQL 标签页如何设置,它始终只写出普通的 CREATE 语句,不带头部语句,不带前置或后置脚本,也不会把逻辑名写入空注释,参见将逻辑名作为注释。它没有选项面板,其右键菜单只提供 Database 和 Bracket。
Code Generator 标签页只为这一张表生成代码,参见代码生成。
在只读编辑器中,面板仍然可以打开,可以通过 Table Properties(那里表右键菜单中的唯一一项),或在跳转所选中的表上按 Alt + Space 打开。标题旁会显示 Read only 徽标,但其 Indexes 标签页不提供任何编辑功能。
编辑器变为只读时已经打开的面板会保持打开,并随之变为只读,参见只读编辑器。
聚焦于表
以 Flow 模式打开 Visualization 标签页,范围缩小到选中的表以及与它们相隔一条关系的所有表。
通过表的右键菜单中的 Focus on this table 打开,或者选中一个或多个表后按 Alt + F。
当你右键点击的表是多个选中表中的一个时,该条目会显示为 Focus on selected tables,并聚焦整个选中范围。在选中范围之外的表上右键,则只聚焦该表。
快捷键作用于选中的表,不包括备注,没有选中任何表时不起作用。只读编辑器的表菜单中没有 Focus on this table,快捷键作用于那里跳转所选中的表,参见只读编辑器。
选中的表分组在这里不起任何作用,快捷键和菜单条目都是如此:分组中的表只有在其本身被选中时才会被纳入,分组菜单中的 Select tables 可以选中它们。
缩小后的视图显示哪些内容,以及如何回到整张图,参见可视化;如何在 Flow 之前显示过的内容之间后退和前进,参见上一个表与下一个表。
索引
索引在表属性面板的 Indexes 标签页中定义,并会包含在导出的 Schema SQL 中。
左侧分两组列出表的键和索引。
Keys 仅在表中有键时显示,列出由表的列所声明的键:先是覆盖标记为 PK 的列的 PK_<table name>,然后按列的顺序,为每个标记为 Unique 的列列出 UQ_<table name>_<column name>。无论名称显示如何,这些名称都是所选数据库的 Schema SQL 所写出的物理名,因此当 Bracket 为 None 时,对于 sales.users 这样带 schema 限定的表,除 Databricks 和 Snowflake 外的所有数据库都会列出 PK_users,参见带 schema 限定的表名。每个键都带有 PK 或 UQ 标记和一个锁形图标。它们在这里是只读的,只会随列的 PK 与 Unique 标志而变化。
Indexes 按添加的顺序列出表的索引。每个索引都有一个用于设为唯一的 UQ 开关、一个名称输入框,以及一个用于删除的 x。作为备用键的索引还会显示其编号,例如 AK1。通过列表底部的 Add Index 添加索引。
右侧在 Columns 下列出表的列,每列各有一个复选框。每一行显示的单元格与该列在画布上的行相同,遵循列顺序、显示选项和名称显示。在左侧选中索引之前,右侧不可编辑。
勾选某一列会将其添加到选中的索引中,取消勾选则将其移除。选中键时,其列会显示为已勾选,但复选框保持禁用。
选中索引所包含的列显示在下方的 Index order 下,每一列都按名称显示命名;在 Both Names 下,名称以括号形式写在逻辑名之后,例如 Member Number (member_no)。通过拖动手柄可以调整它们的顺序,点击某一行的 ASC 或 DESC 标记可以切换排序方向。在备用键中,每一行的末尾都带有其 AK<n>.<m> 标记。该列表一次显示三行,其余的可以滚动查看。
在只读编辑器中,选中键或索引时仍会显示其列,但没有 Add Index 和 x,标签页中的其他内容也都无法更改:名称不接受输入,所有复选框都被禁用,Index order 的各行既不能拖动,也不能翻转其排序。
资源管理器会在每个表的 Indexes 文件夹中列出该表的索引,在那里选择某个索引会跳转到其所在的表。资源管理器的搜索也会查找索引名,并且可以重命名索引,参见搜索的内容。

备用键
备用键是由两列或更多列组成的唯一索引,即 Indexes 标签页中开启了 UQ 开关、并且勾选了表中至少两列的索引。
只有一列的唯一索引所表达的内容与该列的 Unique 标志并无不同,因此它不是备用键;普通索引、主键以及标记为 Unique 的列也都不是备用键。
在显示选项中开启 Alternate Key 后,图会按照 erwin 和 IDEF1X 的写法标记每个备用键的列:AK1.1、AK1.2 等。该选项默认关闭。
键的编号取决于其列在表中的位置,而不是索引添加的顺序。Index order 中第一列在表中位置最靠上的键为 AK1。位置相同时,由各键的下一列决定;如果一个键是另一个更长的键的前导部分,则排在后者之前。
在表中移动列,或调整某个键的 Index order,都可能使键重新编号。通过 Undo 恢复被删除的键时,它会取回原来的编号,并且所有协作者看到的编号都相同。
键的每一列都标记为 AK<n>.<m>,其中 n 是键的编号,m 是该列在键的 Index order 中的位置。属于多个键的列会带有所有标记,以逗号连接。
例如,在包含 a、b、c 三列的表中,覆盖 (c, a) 和 (b, a) 的两个唯一索引会成为 AK1 = (b, a) 和 AK2 = (c, a),因为 b 位于 c 之上。因此 b 显示为 AK1.1,c 显示为 AK2.1,a 显示为 AK1.2,AK2.2。
该标记绘制在行的最后,位于列顺序排在最后的单元格之后。它不是单元格,因此永远不会获得焦点、进入编辑模式或被复制,参见编辑表。
主键列或外键列同样可以带有 AK 标记,因为该标记不会取代任何内容:行首的钥匙图标仍然显示 PK 和 FK,Unique 单元格也保留自己的 UQ。
带有备用键的表会在每一行最后一个单元格之后留出足以容纳其最长标记的空间;没有备用键的表则保持原有宽度。
这些标记显示在 ERD 画布上,但在 70% 及以下,表会折叠为名称,此时不显示任何标记;图片导出中同样会显示这些标记,无论缩放级别如何,导出时每个表都会完整绘制。Visualization 标签页 Graph 模式中的悬停预览同样会显示这些标记;Flow 卡片则从不显示。
无论该选项是否开启,Indexes 标签页都会显示编号,参见索引。
自动布局
替你把所有表排布到画布上。
在画布的右键菜单或快速搜索中打开 Auto Layout,然后从四种布局中选择一种:
| 布局 | 画出的样子 |
|---|---|
Force | 一次模拟:关系把表拉到一起,相邻的表相互推开,重叠的表被分开。 |
Flow | 沿着关系从左到右流动,每条连接线在表上都有各自的接点。它会尽量减少线条交叉,但也可能留下换一种布局就能避免的交叉。 |
Tree - vertical | 自上而下分层:父表位于持有指向它的外键的表之上。 |
Tree - horizontal | 同样的分层,改为从左到右。 |
Force 会在排列稳定之前打开预览,提示信息上提供 Apply 和 Cancel。
预览的取景以布局开始时的图为准,因此在排列稳定的过程中,表可能会移出取景范围。预览以 70% 或更低的缩放绘制,因此表会折叠为名称和颜色边缘。无论文件保留的是哪种显示方式,预览都会以你当前所用的显示方式打开,参见画布之外。
Apply 会保留当前时刻的位置。排列自行稳定后,布局也会自动应用。Cancel 或 Escape 则保持图不变。
其余三种在主线程之外一次算完,没有过程可看:计算期间会显示一条提示,算好的布局会落在图已经占据的区域中央。Cancel 或 Escape 会丢弃你不再等待的布局;不运行 shared worker 的宿主环境则会以 Could not place tables 收场,参见 Web Worker。60 秒内仍未返回的布局也会以同样的方式收场。
无论选择哪一种,移动的都是表和表分组,备注留在原处。表按其在你当前所用的显示方式下的宽度排布。指向自身的关系会被忽略,同两个表之间的多条关系只算一条。
无论分组是否显示,每种布局都会让每个分组中的表聚在一起,并调整每个含有表的分组,使其围住这些表,参见表分组。
结果只会记录为一条历史记录,因此一次 Undo 就能把所有表和分组恢复原位。
只读编辑器不提供 Auto Layout。编辑器变为只读时仍在运行的自动布局会在那里结束:Force 预览会连同其提示一起关闭,且不保留其任何位置;仍在计算的布局会连同其提示一起被丢弃,因此无论是当时还是编辑器再次变为可写之后,都不会有任何表移动。

数据库
支持的数据库如下:
- Databricks
- MSSQL
- MariaDB
- MySQL
- Oracle
- PostgreSQL
- Snowflake
- SQLite
可以通过画布右键菜单、Schema SQL 与 Code Generator 标签页的选项面板或右键菜单,或快速搜索中的 Database 选择数据库。这些入口修改的都是同一个设置。只读编辑器的画布菜单中没有 Database,在其他入口中的选择只会改变该屏幕,参见只读编辑器。
该选项决定导出 Schema SQL 的语法、DataType 的自动补全,以及生成的代码和导入的 schema 所解析出的类型。
该选项也决定 Schema SQL 标签页可以写出哪些 Statements 与 Header 选项。数据库不具备的选项仍会留在选项面板中,但会变暗显示,SQL 则会退回到该数据库具备的最接近的选项。
该选项还决定 Schema SQL 和 Code Generator 的 ORM 目标会写出哪些 ON DELETE 与 ON UPDATE 操作,以及关系菜单会为哪些操作标注 not in <database>,参见 ON DELETE 与 ON UPDATE 和代码生成。
导入 Schema SQL 时,无论编辑器是否列出该类型,列的数据类型都会连同参数列表一起被保留,例如 TIMESTAMP WITH TIME ZONE、public.mood 或 integer[],参见数据类型。DataType 自动补全只推荐所选数据库列出的类型。


画布工具栏
画布底部边缘的中间浮着一个小工具栏,从左到右依次放置作用于画布本身的工具,以及向画布添加内容的命令:
- 抓手与指针。默认是指针;切换到抓手后,无论在空白处还是在表的上方,拖动都会变成平移视图。用
Space在两者之间切换。New Table Group处于绘制状态时,显示为选中状态的是New Table Group按钮,而不是两者之一;此时点击其中任意一个、按Space或选择一种关系表示法,都会结束绘制而不添加分组。 New Table、New Memo和New Table Group。New Table与Alt + N一样添加一个表,New Memo与Alt + M一样添加一个备注。New Table Group与Alt + G一样进入分组绘制状态,并关闭抓手工具;与再按一次Alt + G相同,再点击一次会结束绘制而不添加分组。View Option →Memos隐藏备注期间不显示New Memo,View Option →Table Groups隐藏分组期间不显示New Table Group。- 缩放:
Zoom out、以百分比显示的当前缩放级别,以及Zoom in。这两个按钮与缩放快捷键一样逐级调整缩放,点击百分比则会把缩放恢复为100%。 - 四种关系表示法,与开始绘制关系时使用的相同。参见开始编辑。绘制关系需要依次点击两个表,因此选择一种表示法后工具会切回指针。
Name View,一个带向下箭头的按钮,显示当前的显示方式:Physical Names、Logical Names或Both Names。无论显示的是哪种方式,它都保持同一宽度,因此切换时工具栏永远不会移位。点击它会在工具栏上方打开列出这三种方式的列表,当前的方式带有勾选标记。选择其中一种即可切换到该方式并关闭列表;再次点击该按钮、在其他任意位置按下或按Escape则会关闭列表而不切换。各显示方式绘制的内容参见名称显示,切换是否会被保存参见切换显示方式。- 禅模式
Alt + Z,只保留画布和这个工具栏,隐藏其余界面。再次按Alt + Z或点击按钮即可恢复。已打开的资源管理器会与其余界面一起隐藏,但不会被关闭,并会随其余界面一起恢复。禅模式下仍然可以打开资源管理器,参见何时让位。 Go to content指南针,仅在屏幕上没有任何表、显示的备注或显示的表分组时才会出现在工具栏末尾。参见浏览画布。
每个带有快捷键的按钮都会在提示中标出该快捷键,例如 New Table (Alt + N) (Windows/Linux) 或 New Table (⌥ + N) (Mac)。
在 Force 自动布局预览、表属性、Time Travel 或 Diff Viewer 打开期间,工具栏会暂时隐藏,关闭后再重新出现。
只读编辑器的工具栏保留缩放、Name View、禅模式和 Go to content 指南针。它没有抓手或指针,没有 New Table、New Memo 或 New Table Group,也没有各种表示法,编辑器再次变为可写后它们会回来。

缩放
使用 Ctrl + Wheel (Windows/Linux) 或 ⌘ + Wheel (Mac) 进行缩放。仅滚动滚轮则是平移画布。
触控板上的捏合手势同样可以缩放,以捏合的位置为中心;触摸屏上的两根手指也可以缩放,并会随手指的移动平移画布。
快捷键:Ctrl + Plus (Windows/Linux) 或 ⌘ + Plus (Mac),Ctrl + Minus (Windows/Linux) 或 ⌘ + Minus (Mac)
Ctrl + 0 (Windows/Linux) 或 ⌘ + 0 (Mac) 会保持屏幕中心不变,直接回到 100%。
画布工具栏上的 Zoom out 和 Zoom in 按钮与 Minus、Plus 快捷键一样逐级调整缩放:每按一次调整 4 个百分点,并保持屏幕中心不变。两个按钮之间的百分比显示当前的缩放级别,点击它会像 Ctrl + 0 (Windows/Linux) 或 ⌘ + 0 (Mac) 一样直接回到 100%。
缩放范围为 10% ~ 150%。
在 70% 及以下时,表会折叠为名称和颜色边缘,单元格编辑、单元格快捷键以及复制粘贴都会停止工作,直到重新放大为止。折叠的表所显示的名称遵循名称显示,参见名称显示。
这三个快捷键同样可以缩放 Visualization 标签页,Graph 模式与 Flow 模式均适用,各自在自己的范围内缩放。参见可视化。

浏览画布
画布没有边界,也没有可设置的尺寸。表与备注就停在你放下它们的地方,下面这些都以图本身为准,而不是一张固定大小的页面。
拖动画布的空白区域即可平移视图,也可以用 Space 切换到抓手工具后在任意位置拖动,包括在表的上方。滚轮同样可以平移,Shift + Wheel 则是左右平移。
对鼠标左键而言,表分组的主体(即标题栏下方的区域)相当于空白画布:拖动它会平移视图,Ctrl + drag (Windows/Linux) 或 ⌘ + drag (Mac) 会绘制选择框,点击则会清除选中状态。
平移没有边界:滚轮、拖动和抓手工具都会让视图随你移动到任意远处,在任何一侧都可以越过表继续平移。
按住鼠标中键(即按下滚轮)拖动,可以从画布上的任意位置平移视图,指针和抓手都适用。即使按下的位置落在表、备注、单元格、图标或关系上也同样有效。
中键拖动不会选中、移动或点击任何内容,并会保留选中状态。它会关闭已打开的右键菜单和选色器,浏览器自身的中键滚动和中键粘贴也不会启动。
在滚动条、小地图、画布工具栏或已打开的单元格或备注编辑器上按下中键时,不会平移视图。
右上角的小地图显示的是图本身加上四周各一屏的空间,也就是滚动条可以到达的范围,并向外对齐到较粗的网格,因此缩小得越多,图在小地图中就越小。点击小地图可以将视图移动到该位置,拖动其中的视口矩形则可以平移。缩小时,视口矩形会随之变大,覆盖小地图上更大的区域。
小地图以每个表的颜色绘制该表,并将每个显示的表分组绘制为一个带有分组颜色的框,位于其中的表后面。
右侧和底部的滚动条表示的是同一段范围:从图刚好位于屏幕一侧之外,到刚好位于另一侧之外,因此它至少比当前绘制出的图长出一屏,视图停在图之外时还会更长。在禅模式之外,只要文档中有任何表、显示的备注或显示的表分组,即使全部内容都已在屏幕内,两条滚动条也都会显示。没有这些内容的文档,例如其中仅有的备注已通过 View Option → Memos 隐藏的文档,既没有滚动条,也没有小地图。
拖动滚动条滑块或小地图中的视口矩形是唯一会停下的平移:它最远只能平移到表刚好移出屏幕的位置;如果拖动开始时的位置比这更远,则最远只能到拖动开始的位置。
如果平移之后屏幕上没有留下任何表、显示的备注或显示的表分组,画布工具栏末尾会出现一个 Go to content 指南针,用箭头指出最近的对象在哪个方向、有多远。点击它即可在不改变缩放的情况下把该对象移到屏幕中央。

跳转的落点
所有把你带到画布上某个对象的跳转,都按同一条规则移动视图:快速搜索中 #、@ 和 : 的结果,资源管理器中的行及其查找与替换搜索的匹配项,Diff Viewer 列表中的行,Flow 中的外部链接卡片按钮,Dictionary 标签页 Checks 工作表中指明某个表或列的检查项,以及 Import and Add 的落点。上述各节说明跳转会选中什么,本节则说明视图会移到哪里。
跳转永远不会改变缩放,并且最多滚动一次。从其他标签页跳转时,会先切换到 ERD 标签页。
它按画布实际显示的范围计算:位于顶部工具栏下方(禅模式下则为整个高度),并位于已打开的资源管理器右侧,因为资源管理器会使画布变窄,而不是覆盖在画布上。
水平方向和垂直方向分别判断,目标在某个方向上已经显示得足够清楚时,该方向保持原样不变:
- 在该方向上不超过画布一半长度的目标,只要其中点位于画布中间的一半范围内,即横向或纵向四分之一到四分之三之间,就保持不动。否则会把其中点移到画布的中间。
- 更长、但两端各留出
40px后仍能容纳的目标,只要完全位于视野内就保持不动。否则,在水平方向上将其居中;在垂直方向上,将其顶部移到画布顶部下方40px处。 - 比这更长的目标,只要完全位于视野内就保持不动;如果它比画布还长,则只要其关键部分(见下文)位于视野内就保持不动。否则,能容纳时将其居中;不能容纳时,则在使其关键部分两端都至少位于画布内
40px的前提下尽量靠近中间放置;关键部分长到无法做到这一点时,则让其起始端保持在画布内40px处。
因此,位于画布左边缘附近、垂直方向居中的小表只会在水平方向上移动。
跳转带入视野的内容,以及无法完整显示时必须显示的关键部分:
- 表:整个表,关键部分是其顶部的名称栏;对于表注释中的匹配项,如果 View Option →
Table Comment显示了注释,关键部分则是其注释单元格。在70%及以下,表会折叠为名称,此时关键部分是框中间的名称。 - 列:该列所在的行,关键部分是跳转到的单元格:其名称;对于逻辑名的匹配项或针对逻辑名的检查项,是其逻辑名;对于针对其域的检查项,是其域单元格;或者在 View Option →
Column Comment显示注释时,匹配项所在的注释。该行没有绘制这样的单元格时,跳转会转到绘制在其位置上的单元格:在Logical Names下以逻辑名代替名称,在Physical Names下以名称代替逻辑名;View Option →Domain关闭期间以类型单元格代替域单元格,DataType也关闭时则以整行代替。在70%及以下,列会按表的规则把其所在的表带入视野。 - 宽到无法完整显示的单元格,例如很长的注释:关键部分是其中匹配的文本。如果跳转到的是绘制在匹配项所在单元格位置上的替代单元格,例如在
Physical Names下逻辑名匹配项对应的名称,则不以文本为准。 - 关系:横跨其两个表的框,关键部分是子表。
- 表分组:其框,关键部分是其标题栏。
- 备注,或 Import and Add 落下的内容块:整个备注或内容块。
两个方向都不需要移动时不会滚动,因此连续两次跳转到同一位置时,第二次不会移动任何内容。滚动了画布的跳转会像其他任何视图位置的变化一样,把这次滚动记录到 Undo 历史记录中;没有移动任何内容的跳转则不会留下可撤回的内容。对于 Import and Add,滚动与添加属于同一步。Diff Viewer 列表中的行只会移动该视图的只读两侧,因此不会记录任何内容,而只读编辑器完全不记录跳转。
任何跳转都不会开始或完成正在绘制的关系。Go to content 指南针不是跳转:它会把所指的对象移到中央。
Diff Viewer
可以将以前保存的文档与当前文档进行比较。
在画布的右键菜单中选择 Diff Viewer,然后选择之前导出的 .json 文档。
该视图会覆盖在画布之上:左侧显示变更内容,右侧并排显示保存的文档与当前文档。
当前文档按视图打开时的状态进行比较;此后所做的更改,包括协作者所做的更改,都不会反映到视图中。无论两个文件各自保留的是哪种显示方式,两侧都会以你当前所用的显示方式打开并保持该方式,参见画布之外。视图打开期间,已打开的资源管理器会被隐藏,因此视图会占据编辑器的整个宽度。
每一侧都可以通过滚轮、拖动空白区域或表分组的主体,或在其上任意位置用中键拖动来平移,并通过 Ctrl + Wheel (Windows/Linux)、⌘ + Wheel (Mac) 或捏合手势缩放。在 70% 及以下,表会像在画布上一样折叠,参见两侧的标记。
两侧都是只读的,不会修改文档中的任何内容。每一侧都有各自的选中状态,在某一侧点击表只会在该侧选中它。
可以通过打开时出现的 Diff Viewer 提示上的 Close 按钮或 Escape 关闭该视图。
只读编辑器同样提供 Diff Viewer,该视图在那里的工作方式与在任何编辑器中相同,点击某一侧的表仍只在该侧选中它。编辑器变为只读时已经打开的视图会保持打开。

比较的内容
表、列、索引、外键、备注和表分组都会参与比较。
每一项首先按其 id 配对,因此与同一文件的较早版本比较时,由于 id 保持不变,重命名的表、列、索引或表分组仍是同一项,并列为已重命名。
其余各项按保留下来的内容一一配对:表或表分组按名称配对,区分大小写;列或索引按其所在的表和名称配对;外键按其两个表及其列对配对;备注先按文本、再按位置配对。没有名称的索引按其列、列的顺序与方向以及是否唯一配对,没有名称的表分组则与共有的表最多的分组配对。
因此,与来自其他地方的文件比较时,例如通过 SQL 导入重建的图,重命名的表会显示为一个已删除的表和一个已添加的表。
以下内容算作变更:
- 表:名称、注释、所属表分组、位置和颜色。
- 列:名称、注释、数据类型、默认值、Auto Increment、主键、Unique、Not Null,以及它在表中的位置。只有位于两个文档共有的顺序之外的列才算作已移动,因此添加、删除或移动一列不会使其他列被标记。
- 索引:名称、UNIQUE,以及其列及列的顺序与方向。
- 外键:列对、关系类型,以及 ON DELETE 与 ON UPDATE 操作。
- 备注:文本、位置、尺寸和颜色。
- 表分组:名称、其中的表、颜色、位置和尺寸。
因此,只是被移动、调整了大小或更改了颜色的表、备注或分组也算作已变更。位置和尺寸按整像素比较,叠放顺序以及连接线与表的接点则从不计入。
逻辑名、域关联以及 Dictionary 标签页中的词根、术语和域都不参与比较,因此仅对它们所做的变更既不会列出,也不会标记。由域修改的数据类型则会计入,算作该列数据类型的变更。
变更树
左侧的列表以资源管理器的树的形式绘制,只包含发生了变更的内容:Tables、Table Groups 和 Memos,每一项只在其中有行时才显示;表下方则是它自己的 Columns、Indexes 和 Foreign Keys。外键列在其子表之下,已添加或已删除的表下方不列出任何内容。
每个文件夹都会显示其中的行数,所有文件夹和表在开始时都处于展开状态。
表行或列行按两侧打开时所用的显示方式命名。在 Both Names 下,行中先显示逻辑名,其后是以淡色显示的名称;在已删除的行上,淡色的名称会与其余部分一起带删除线。无论哪种显示方式,表和表分组都按名称排列,不区分大小写。备注,以及表的列、索引和外键,沿用当前文档中的顺序,已删除的项会放回其原来的位置。备注行显示备注的第一行,外键行先显示其子表的列,然后是 → 以及父表及其列,例如 user_id → users(id)。名称为空时以斜体显示 unnamed。
每一行的末尾都有一个字母,标记为 A、D、M 或 R 的行,其名称会以该字母的颜色显示:
A,已添加,绿色:只存在于当前文档中。D,已删除,红色并带删除线:只存在于保存的文档中。M,已修改,琥珀色:两者中都有,但发生了变更。R,已重命名,蓝色:两者中都有,但名称不同。重命名优先于其他任何变更,提示中仍会列出这些变更。~,琥珀色,出现在每个文件夹的末尾,以及仅因其内部发生变更而列出的表的末尾;它们的名称保持通常的颜色。
将指针悬停在某一行的名称上会显示其提示:先是状态,即 Added、Deleted、Modified、Renamed 或 Changed inside,然后每项变更各占一行,例如 Name: users → members 或 NN: ✗ → ✓。文本只引用其第一行,超过 40 个字符的部分会被截断,空值显示为 —。已添加或已删除的项,其提示只显示状态。
树上方的 Filter by name 会保留当前名称或保存时的名称,或者当前逻辑名或保存时的逻辑名中包含所输入文本的行,不区分大小写,在每种显示方式下都是如此。名称匹配的表会保留其所有行,名称不匹配的表则只保留匹配的行。没有任何匹配时,树为空。
两个文档完全没有差异时,树会显示 No changes。
拖动树的右边缘可以在 200px 到 480px 之间调整其宽度,双击该边缘则恢复为 260px。每次打开比较时宽度都是 260px,其余宽度由两侧平分。
在树中使用键盘移动的方式与资源管理器的树相同,参见资源管理器中的按键;但在这里,无论是在树中还是在 Filter by name 中,Escape 都会关闭该视图。
跳转到变更
点击某一行,或在键盘焦点位于该行时按 Enter 或 Space,会在包含该项的每一侧跳转到该项:已添加的项只在当前文档一侧,已删除的项只在保存的文档一侧,两者都有的项则在两侧。文件夹行只会折叠或展开,表行开头的箭头也是如此。
- 表行、列行或索引行会单独选中该表。
- 外键行会把其两个表带入视野(两个表相距太远、无法同时显示时则只带入子表),选中子表及其外键列,并点亮连接线,参见读懂连接线。
- 备注行会选中该备注,表分组行会选中该分组。某一侧的文档隐藏的备注或分组,在该侧不会跳转。
每一侧都按跳转的落点中的规则移动,并以该侧为准计算,因此再次点击同一行不会移动任何内容。
两侧的标记
两侧只为文本、轮廓和连接线着色,不填充任何内容。已添加为绿色,只显示在当前文档一侧;已删除为红色,只显示在保存的文档一侧;已变更为琥珀色,已重命名为蓝色,两者都显示在两侧。未变更的内容照常绘制。
- 已添加或已删除的表或表分组会以相应的颜色描出轮廓,其名称也显示为该颜色。已添加或已删除的备注会描出轮廓。
- 在两个文档都有的表中,已添加或已删除的列会为其整行着色,已移动的列则会使其整行变为琥珀色。已添加或已删除的表内部的任何内容都不会单独标记。
- 已变更单元格的文本会变为琥珀色:表的注释,列的注释、数据类型、默认值、Auto Increment、Unique 或 Not Null,或备注的文本。主键的变更会使该列的钥匙图标变为琥珀色。
- 已重命名的表、列或表分组,其名称显示为蓝色。
- 表、备注或表分组发生的变更没有对应的单元格时,例如移动、尺寸或颜色的改变,或者所属分组或分组中的表发生变化,会以琥珀色描出轮廓。
- 已添加、已删除或已变更的外键会以相应的颜色绘制其连接线。悬停在连接线上,或者由某一行点亮时,则改为以通常的悬停颜色绘制。
- 索引的变更在两侧都不做任何标记,只显示在树中。
每一侧都遵循其自身文档的显示选项。变更位于该侧未绘制的单元格中时,会改为显示在名称上。列的变更位于被显示选项隐藏的单元格中时,例如默认均为关闭的 Unique 或 Auto Increment,该列的名称会变为琥珀色;在不显示钥匙图标的行上发生的主键变更也是如此。Table Comment 关闭期间,表注释的变更会使表名变为琥珀色。重命名的蓝色优先于这种琥珀色。被其文档隐藏的备注或表分组会列在树中,但不会绘制在该侧。
Logical Names 不绘制名称单元格,因此重命名的蓝色,以及变更位于该侧未绘制的单元格中时的琥珀色,都会显示在代替名称绘制的逻辑名上。在每种显示方式下,数据类型的变更都会使类型单元格变为琥珀色,即使该单元格显示的是域的名称。两侧都不会绘制词典的检查在画布上为名称添加的颜色,参见画布上的标记。
在 70% 及以下,折叠的表会保留其轮廓。已添加或已删除的表,其名称保留绿色或红色,已重命名的表保留蓝色;否则,注释发生变更时名称会变为琥珀色。列的变更在重新放大之前不会绘制,但树中仍会列出。
只读编辑器
readonly 编辑器(例如在 VS Code 中重新以图的形式打开的 Git 修订版本)是阅读者。它的六个标签页、资源管理器、小地图、滚动条以及协作者的光标和选中状态都保留,所有会改变图的控件都被去掉,而不是变暗显示。
在 ERD 画布上:
- 无论从哪里开始,拖动都会平移:空白画布、表、备注或表分组上都一样。鼠标中键、滚轮、捏合和缩放按键的工作方式与在任何编辑器中相同。
- 指针停在表上会点亮它的关系。不移动的点击会点亮其所点中的表的关系,或其所点中的关系,在其他位置点击则会将点亮熄灭。
- 按下、选择框或全选按键都不会选中任何内容。只有跳转才会选中:资源管理器的一行、其查找与替换的一个匹配项,或快速搜索的
#、@或:结果,会选中其所到达的对象,像任何选中一样绘制轮廓,焦点单元格位于跳转所指定的位置。不移动的点击会清除该选中。 - 方向键会移动焦点单元格。复制、
Table Properties和Focus on this table通过各自的按键作用于跳转所选中的对象,粘贴不会添加任何内容。其他按键列在快捷键中。 - 没有任何单元格、备注或表分组名称会打开编辑。表、备注和分组上没有
+或x按钮,备注和分组没有调整大小的边缘,没有列拖动手柄,也没有取色器。
画布右键菜单保留 View Option、Name View、Export 和 Diff Viewer。它没有 New Table、New Memo、New Table Group、Toggle Explorer、Relationship、Derive Physical Names Again、Database、Import、Import and Add 或 Auto Layout。
表的菜单只保留 Table Properties,它会以只读方式为该表打开面板,参见表属性。备注、关系和表分组都不会弹出菜单。
画布工具栏保留缩放、Name View、禅模式和 Go to content 指南针。顶部工具栏把数据库名显示为无法编辑的文本,没有 Undo、Redo 或 Time Travel。
Export(带有它的全部三个条目)和 Diff Viewer 的工作方式与在任何编辑器中相同。
View Option、Name View、数据库、标签页、视图位置和缩放在那里仍可更改,但只作用于该屏幕:没有任何内容会被保存、记录或共享,参见设置中的只读编辑器。
把编辑器变为只读会结束所有正在打开的编辑:单元格、备注或表分组名称的编辑器、正在绘制的关系或 New Table Group、选中状态和焦点单元格、抓手工具、取色器、Map Columns 和 Time Travel。视图、缩放、标签页和名称显示保持原样,表属性、Diff Viewer 和 Export image 对话框保持打开。
正在进行的手势也会在那里结束。表或备注的拖动会停在当前位置,Alt + drag 不会放下副本,列拖动会结束,备注的调整大小会停在当前位置,表分组的调整大小会被丢弃,自动布局会连同其提示一起被丢弃,因此没有任何表移动。
再次变为可写后,编辑器会还回上述控件,而被这次转换关闭的内容不会重新打开。