外键
外键用于表达表与表之间的引用关系,保证被引用的数据必须真实存在。
#type / concept
#status / growing
#tech / dev / backend
#resource / database
#resource / sql
[!info] related notes
外键
一句话定义
外键是表与表之间的引用约束,用来保证引用目标真实存在。
核心机制 / 工作原理
外键会把一张表中的某列,和另一张表中的主键或候选键关联起来。
它的核心价值是引用完整性:
- 不能引用不存在的父记录
- 删除或更新父记录时,可以定义相应策略
- 降低孤儿数据和脏数据出现的概率
最小例子 / 最小场景
CREATE TABLE orders (
id BIGINT PRIMARY KEY,
user_id BIGINT NOT NULL,
CONSTRAINT fk_orders_user
FOREIGN KEY (user_id) REFERENCES users(id)
);
这里 orders.user_id 只能引用真实存在的 users.id。
边界与易混淆点
- 外键的主要价值不是“方便 join”,而是保证关系正确。
- 有些团队因为迁移或性能顾虑不启用外键,但这不等于外键没有建模价值。
- 外键是数据库层规则,不应该完全依赖应用代码手工模拟。