免费 ERD 入门教程 — 无需账号,本地创建第一个 ERD
这篇教程面向第一次设计数据库的读者,用免费 ERD 编辑器 Dr.ERD 在不注册账号的情况下,按顺序在本地完成一个三表 ERD。完成的模型保存为电脑上的 .drerd 文件。
当前文章: 免费 ERD 入门教程
1. 什么是 ERD、表和字段
ERD(实体关系图)用图形表示数据库结构。一个方框是一张表,表内的一行是一个字段。要保存的对象成为表,对象具有的属性成为字段。每条数据以一行记录保存,每行在每个字段上各取一个值。
- 表:存放同类数据的集合,例如会员、订单、订单明细。
- 字段:表保存的属性,例如 name(姓名)、created_at(创建时间)。
- 行:一条实际数据。字段定义不变时,行数增加结构也不变。
2. 主键、外键与 1:N 关系
主键(PK)用于区分每一行,外键(FK)指向另一张表的键,把两张表连接起来。一个会员可以下多个订单时,关系就是会员 1 : 订单 N。子端允许存在没有订单的会员,因此表示为零或多个(0..N)。本教程的两个关系都是非标识关系,父键不会加入子表主键。
- 外键字段的类型必须与被引用的字段一致:members.id 是 BIGINT,orders.member_id 也必须是 BIGINT。
- 本教程手动输入 id 值,不使用自增(Identity)。
- N:M 关系不会自动生成中间表,需要时请自行创建中间表。
- 连接关系前,父表必须已经有主键。
3. 无需账号准备工作文件夹
Dr.ERD 无需安装,在 Chrome 或 Edge 中运行。不注册账号、选择工作文件夹即可开始建模,本地工作文件夹中的 ERD 默认不会上传到服务器。团队协作需要 Google 登录,团队文档会保存到所选团队。AI 对话是可选功能,只有在自行完成设置后发送的消息,才会把当前 ERD 上下文发送给你选择的提供方。
- 选择“启动编辑器”进入工作区。
- 在“选择工作区”中选择保存 .drerd 文件的文件夹。
- 浏览器询问文件夹访问权限时选择“允许”。
- 桌面版 Chrome 与 Edge 支持选择并保存文件夹。
- 再次打开同一个文件夹,之前的文件会出现在文件列表中。
4. 新建模型并选择 PostgreSQL 18
在文件列表上方点击“新建模型”,创建本教程使用的模型。目标数据库选择与示例相同的 PostgreSQL 18。点击“确认”后只会打开一个空画布,不会自动创建表。
- 在文件列表中点击“新建模型”。
- 在文件名中输入 first-erd。
- 在“目标数据库”中选择 PostgreSQL 18,然后点击“确认”。
- 画布打开后,点击上方工具栏中的“表”按钮。只有该按钮处于按下状态时才能放置表。
- 点击画布上的空白位置,放置第一张表。
5. 创建三张表和字段
第 4 步已经放置了第一张表,所以这里再创建剩下的两张,完成会员、订单、订单明细三张表。新建的表会自动带有公共字段 created_at 和 updated_at,因此要先把这两个字段从三张表(包括第 4 步放置的那张)中全部删除,然后再添加本教程的字段。之后用“添加列”添加一行,输入物理名和类型,并在 id 字段点击“指定 PK”。orders.created_at 删除后,请在这一步用“添加列”重新创建,并把类型设为 TIMESTAMP。下面的列表是本教程要创建的全部字段,请逐一核对是否遗漏。
- 点击上方工具栏中的“表”按钮,再点击画布空白位置放置一张表。第 4 步已经放置了第一张,所以用这个方法再放两张,一共三张。
- 以编辑状态打开表,用字段行右侧的垃圾桶(删除列)按钮,把 created_at 和 updated_at 从三张表中全部删除。
- 用“添加列”添加字段,并输入物理名和类型。
- 需要长度和小数位的类型要填写数值,例如 VARCHAR(100)、NUMERIC(12,2)。
- orders.created_at 在这里用“添加列”创建,并把类型设为 TIMESTAMP。默认公共字段已经删除,因此不会重名。
- 在 id 字段点击“指定 PK”,把它设为主键。
- 把表名设为 members、orders、order_items。
- members:id BIGINT(PK)、name VARCHAR(100)
- orders:id BIGINT(PK)、member_id BIGINT(FK)、created_at TIMESTAMP
- order_items:id BIGINT(PK)、order_id BIGINT(FK)、product_name VARCHAR(100)、quantity INTEGER、unit_price NUMERIC(12,2)
- 新建表自动带入的两个公共字段(created_at、updated_at)都会被删除,只重新添加 orders.created_at 并设为 TIMESTAMP,所以三张表的字段与下面列出的 10 个完全一致。
- 三张表一共有 10 个字段,连接关系之后也应当仍然是 10 个。
- 下面的 Mermaid 是完成模型的文本参考,请检查物理名和类型是否与上面的列表一致。
erDiagram
members {
BIGINT id PK
VARCHAR(100) name
}
orders {
BIGINT id PK
BIGINT member_id FK
TIMESTAMP created_at
}
order_items {
BIGINT id PK
BIGINT order_id FK
VARCHAR(100) product_name
INTEGER quantity
NUMERIC(12,2) unit_price
}
members ||..o{ orders : "places"
orders ||..o{ order_items : "contains"6. 连接两个关系
打开“关系工具”中的 1:N 按钮,依次点击父表和子表,会打开关系设置界面。让“标识关系”保持关闭,在引用键中选择 PK,再在“引用键 → FK”中选择已经创建好的外键字段。
- 点击“关系工具”中的 1:N 按钮启用工具。
- 先点击父表 members,再点击子表 orders。第一次点击是父表,第二次是子表。
- 在打开的界面中让“标识关系”保持关闭。非标识关系会自动添加外键,但不加入子表主键。
- 在引用键中选择 PK,members 的主键 id 就是被引用的键。
- 在“引用键 → FK”中打开 id 一行的选择框,选择已有的 member_id,而不是“+添加列”。保留“+添加列”会新建一个 id_2,使字段数量增加。
- 点击“应用”保存关系。
- 用同样的方法再次点击 1:N 按钮,依次点击父表 orders、子表 order_items,把引用键 PK 的 id 对应到已有的 order_id,然后点击“应用”。
- 两个关系都允许零或多个(0..N):没有订单的会员和没有明细的订单都可以保存。
- 外键类型与被引用字段不一致时会提示错误。
- 连接两个关系之后,模型仍然是三张表、10 个字段。如果字段变多,说明在“引用键 → FK”中选择了“+添加列”。
7. 把所有字段设为必填
本教程最终要求字段必须有值。在“列详情”中关闭“允许 NULL”,该字段就不能保存空值。
- 在“编辑表”中选择字段。
- 在“列详情”中关闭“允许 NULL”。
- 对三张表的 10 个字段全部重复一次。
- “允许 NULL”保持开启时,该字段可以保存空值。
- 导出 DDL 时,关闭“允许 NULL”的字段会输出为 NOT NULL。
8. 保存并重新打开
使用 Ctrl+S 或 Cmd+S 保存到工作文件夹的 .drerd 文件。在文件列表中重新打开同一个文件,保存的内容会原样出现。
- 按 Ctrl+S 或 Cmd+S。
- 确认未保存提示消失、显示已保存。
- 在文件列表中重新打开 first-erd。
- 检查三张表、两个关系和必填字段设置是否保持不变。
- 完成结果:三张表、两个非标识 0..N 关系、三个主键、两个外键。
- 保存的文件就是所选工作文件夹中的 .drerd 文件。
9. 常见问题排查
练习中最常遇到的三种情况及检查方法。
- 文件夹权限:浏览器询问访问权限时选择“允许”。如果拒绝过或连接中断,用“选择工作区”或“重新连接文件夹”再次选中同一个文件夹。
- 关系仍未配置:请设置关系的引用键与 FK 对应,并先为父表指定主键再连接。
- 必填字段报错:检查设为必填的字段是否已关闭“允许 NULL”,允许留空的字段则保持开启。
10. 下一步
把完成的模型导出,用于真实数据库或文档。
- 使用 SQL 导出生成 PostgreSQL 18 DDL,可直接在数据库中执行。
- Mermaid 导出适合粘贴到文档和评审中。