外键配置与 ER 图
打开筑表师进行关系建模。已有建表语句时,先按导入与解析 SQL载入表结构;建模完成后,可继续生成 ORM 模型。
本指南介绍如何使用筑表师的外键配置面板与交互式 ER 关系图进行可视化关联建模,并定义安全的数据完整性约束。
示例:用户与订单的多对一关系
本例使用 MySQL 物理外键。一个用户可以有多笔订单,每笔订单必须引用一个用户;两侧关联字段均为有符号 INT。
准备两张表
复制以下 SQL,在筑表师中选择 MySQL,通过 导入 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 图
- 打开 ER 关系图,从
orders.user_id拖向users.id。 - 选择物理外键、多对一(N:1)、必选(Required),删除规则设为
RESTRICT,更新规则设为CASCADE。 - 将关系名称设为
fk_orders_user,不勾选自动创建查询索引。点击创建关系,保存orders。
关系方向如下,箭头从外键字段指向被引用的主键:
orders.user_id (N) ───→ users.id (1)ER 图应显示物理外键的实线。users.id 是主键,orders.user_id 为 NOT NULL,但不设置唯一约束,因此多个订单可以引用同一个用户。
核对生成的 SQL
选择 orders 后,建表 DDL 应包含以下内容(排版可能随格式设置变化):
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 模型,检查表结构如何映射为代码。
逻辑关系(不创建物理外键)
没有物理外键的系统也可以记录表间业务关联。源表和目标表必须先保存到工作区。
- 在 ER 图中从源字段连接点拖向目标字段连接点。
- 在向导中选择 逻辑关系,确认字段、基数、可选性,并填写业务说明。
- 点击 创建关系。目标字段无需具备主键或唯一索引。
逻辑关系以虚线展示,标签显示基数与可选性,悬停可查看业务说明;外键配置列表也会标明“逻辑关系”。可以从图中或列表中删除关系,也可以在列表中修改关系名称。
逻辑关系仅记录设计意图,不创建物理外键、唯一索引或普通索引,也不修改字段可空性。DDL、ORM 和 ALTER/回滚输出均不包含该关系。关系随表保存、版本历史、分享及工作区同步保留。以下物理外键的目标唯一性和级联规则限制不适用于逻辑关系。
适用场景
适用于在多张业务表(如用户表与订单表、部门表与员工表)之间建立引用关系,明确级联更新/删除行为,并在全局画布中审查领域实体的拓扑结构。
核心操作流程
1. 通过交互式 ER 图创建关系(推荐)
- 确保源表与目标表均已保存至当前工作区。
- 点击表配置区顶部的ER 关系图按钮打开画布。
- 拖拽连线:将源表字段右侧的连接点拖拽至目标表字段左侧的连接点上。
- 在关系创建向导中配置:
- 核对字段:向导自动带入源字段与目标字段(目标字段仅限单列主键或唯一键)。
- 选择基数:选择 多对一(N:1) 或 一对一(1:1)。选择一对一时,系统会自动为源字段施加唯一约束。
- 选择可选性:选择 必选(Required)(源字段设为
NOT NULL)或 可选(Optional)(源字段设为NULL)。 - 配置级联规则与索引:设定
ON DELETE与ON UPDATE策略(NO ACTION、CASCADE、SET NULL等),并勾选是否为源字段自动创建查询索引。
- 点击创建关系,外键约束、字段可空性与索引将一次性原子写入源表,ER 画布自动刷新渲染拓扑连线。
2. 通过外键配置面板手动创建
- 切换至“外键配置”标签页。
- 点击新增外键展开编辑行。
- 录入外键约束名,选择当前表字段、关联目标表及目标字段。
- 按需配置 更新规则(ON UPDATE) 与 删除规则(ON DELETE)。
- 右侧 DDL 实时追加
CONSTRAINT ... FOREIGN KEY ... REFERENCES ...语句。
3. ER 画布浏览与整理
- 节点拖拽与自动布局:自由拖拽表节点调整位置,或使用画布工具栏的一键自动整理算法。
- 缩放与定位:使用鼠标滚轮进行画布缩放,支持拖动画布全局浏览。
- 关系线管理:点击关系线上的标签可查看规则详情;点击删除图标可直接移除对应的外键约束。
校验与完成标志
- [ ] 外键面板与 ER 图中关系连线清晰展示表间关联。
- [ ] 右侧 DDL 包含合规的外键约束子句。
- [ ] 一对一关系已正确设置唯一索引;高频关联的外键字段已配置普通索引。
常见注意事项
外键类型兼容性与引用要求
目标字段必须是单列主键或唯一索引列。同时,源字段与目标字段的数据类型、有无符号(UNSIGNED)必须保持严格一致,否则在数据库执行时会报错。
- SET NULL 依赖:如果删除规则选择了
SET NULL,源字段必须为可空(NULL),不能勾选NOT NULL。 - 同名表区分:ER 图节点严格基于保存记录的唯一标识进行绑定,不会模糊匹配同名表。