Skip to content

外键配置与 ER 图

打开筑表师进行关系建模。已有建表语句时,先按导入与解析 SQL载入表结构;建模完成后,可继续生成 ORM 模型

本指南介绍如何使用筑表师的外键配置面板交互式 ER 关系图进行可视化关联建模,并定义安全的数据完整性约束。

示例:用户与订单的多对一关系

本例使用 MySQL 物理外键。一个用户可以有多笔订单,每笔订单必须引用一个用户;两侧关联字段均为有符号 INT

准备两张表

复制以下 SQL,在筑表师中选择 MySQL,通过 导入 SQL 导入,并确认两张表均已保存到工作区。详细步骤见导入与解析 SQL

sql
CREATE TABLE users (
  id INT NOT NULL,
  name VARCHAR(100) NOT NULL,
  PRIMARY KEY (id ASC)
);

CREATE TABLE orders (
  id INT NOT NULL,
  user_id INT NOT NULL,
  PRIMARY KEY (id ASC)
);

创建关系并检查 ER 图

  1. 打开 ER 关系图,从 orders.user_id 拖向 users.id
  2. 选择物理外键、多对一(N:1)必选(Required),删除规则设为 RESTRICT,更新规则设为 CASCADE
  3. 将关系名称设为 fk_orders_user,不勾选自动创建查询索引。点击创建关系,保存 orders

关系方向如下,箭头从外键字段指向被引用的主键:

text
orders.user_id (N) ───→ users.id (1)

ER 图应显示物理外键的实线。users.id 是主键,orders.user_idNOT NULL,但不设置唯一约束,因此多个订单可以引用同一个用户。

核对生成的 SQL

选择 orders 后,建表 DDL 应包含以下内容(排版可能随格式设置变化):

sql
CREATE TABLE orders (
  id INT NOT NULL,
  user_id INT NOT NULL,
  PRIMARY KEY (id ASC)
);

ALTER TABLE orders ADD CONSTRAINT fk_orders_user FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE RESTRICT ON UPDATE CASCADE;

实际执行时先创建 users,再执行 orders 的建表和外键语句。RESTRICT 阻止删除仍被订单引用的用户;CASCADE 在用户主键更新时同步修改订单的引用值。MySQL 表需使用支持外键的存储引擎,例如 InnoDB。

如果只需要记录业务关联,选择逻辑关系即可,但不会生成上述 ALTER TABLE 外键语句。接下来可以生成 ORM 模型,检查表结构如何映射为代码。

逻辑关系(不创建物理外键)

没有物理外键的系统也可以记录表间业务关联。源表和目标表必须先保存到工作区。

  1. 在 ER 图中从源字段连接点拖向目标字段连接点。
  2. 在向导中选择 逻辑关系,确认字段、基数、可选性,并填写业务说明。
  3. 点击 创建关系。目标字段无需具备主键或唯一索引。

逻辑关系以虚线展示,标签显示基数与可选性,悬停可查看业务说明;外键配置列表也会标明“逻辑关系”。可以从图中或列表中删除关系,也可以在列表中修改关系名称。

逻辑关系仅记录设计意图,不创建物理外键、唯一索引或普通索引,也不修改字段可空性。DDL、ORM 和 ALTER/回滚输出均不包含该关系。关系随表保存、版本历史、分享及工作区同步保留。以下物理外键的目标唯一性和级联规则限制不适用于逻辑关系。

适用场景

适用于在多张业务表(如用户表与订单表、部门表与员工表)之间建立引用关系,明确级联更新/删除行为,并在全局画布中审查领域实体的拓扑结构。


核心操作流程

1. 通过交互式 ER 图创建关系(推荐)

  1. 确保源表与目标表均已保存至当前工作区。
  2. 点击表配置区顶部的ER 关系图按钮打开画布。
  3. 拖拽连线:将源表字段右侧的连接点拖拽至目标表字段左侧的连接点上。
  4. 在关系创建向导中配置
    • 核对字段:向导自动带入源字段与目标字段(目标字段仅限单列主键或唯一键)。
    • 选择基数:选择 多对一(N:1)一对一(1:1)。选择一对一时,系统会自动为源字段施加唯一约束。
    • 选择可选性:选择 必选(Required)(源字段设为 NOT NULL)或 可选(Optional)(源字段设为 NULL)。
    • 配置级联规则与索引:设定 ON DELETEON UPDATE 策略(NO ACTIONCASCADESET NULL 等),并勾选是否为源字段自动创建查询索引。
  5. 点击创建关系,外键约束、字段可空性与索引将一次性原子写入源表,ER 画布自动刷新渲染拓扑连线。

2. 通过外键配置面板手动创建

  1. 切换至“外键配置”标签页。
  2. 点击新增外键展开编辑行。
  3. 录入外键约束名,选择当前表字段、关联目标表及目标字段。
  4. 按需配置 更新规则(ON UPDATE)删除规则(ON DELETE)
  5. 右侧 DDL 实时追加 CONSTRAINT ... FOREIGN KEY ... REFERENCES ... 语句。

3. ER 画布浏览与整理

  • 节点拖拽与自动布局:自由拖拽表节点调整位置,或使用画布工具栏的一键自动整理算法。
  • 缩放与定位:使用鼠标滚轮进行画布缩放,支持拖动画布全局浏览。
  • 关系线管理:点击关系线上的标签可查看规则详情;点击删除图标可直接移除对应的外键约束。

校验与完成标志

  • [ ] 外键面板与 ER 图中关系连线清晰展示表间关联。
  • [ ] 右侧 DDL 包含合规的外键约束子句。
  • [ ] 一对一关系已正确设置唯一索引;高频关联的外键字段已配置普通索引。

常见注意事项

外键类型兼容性与引用要求

目标字段必须是单列主键或唯一索引列。同时,源字段与目标字段的数据类型、有无符号(UNSIGNED)必须保持严格一致,否则在数据库执行时会报错。

  • SET NULL 依赖:如果删除规则选择了 SET NULL,源字段必须为可空(NULL),不能勾选 NOT NULL
  • 同名表区分:ER 图节点严格基于保存记录的唯一标识进行绑定,不会模糊匹配同名表。