为什么需要连接(关系模型回顾)
回顾关系模型、规范化表和外键,并了解 JOIN 为何是跨表重新组装数据的桥梁。
为什么需要连接(关系模型回顾) 是 CoddyKit 上的免费 SQL Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 SQL Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 SQL Academy 课程共包含 4 节课。
一图看懂规范化
不要复制数据,而是将数据拆分到多个表中:
users— id、name、emailorders— id、user_id、total
每个订单通过 id 引用用户,而不是再次存储用户的姓名和电子邮件。
为什么要规范化?
优点:
- 没有重复数据——只需在一个地方修改用户的电子邮件
- 表更小——缓存命中率更高
- 约束可以强制维护关系
外键定义连接关系
连接关系通过 FOREIGN KEY 声明:
CREATE TABLE orders (
id BIGSERIAL PRIMARY KEY,
user_id BIGINT NOT NULL REFERENCES users(id),
total NUMERIC(10,2) NOT NULL
);使用 JOIN 重新组合数据
要显示“每个订单所属用户的姓名”,您需要将这些表重新 JOIN 在一起:
SELECT o.id, o.total, u.full_name, u.email
FROM orders o
JOIN users u ON u.id = o.user_id
ORDER BY o.id;心智模型:经过筛选的笛卡尔积
从概念上看,JOIN 会:
- 计算两个表的交叉乘积(将表 A 的每一行与表 B 的每一行配对)
- 只保留 ON 条件为 TRUE 的配对
实际操作中,数据库会使用哈希连接、归并连接或嵌套循环连接,但结果相同。
一对多
一个用户可以有多个订单。“多”的一方携带外键。
-- Each order row points back to its user:
SELECT u.email, COUNT(o.id) AS order_count
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
GROUP BY u.id, u.email;通过连接表实现多对多
标签 ↔ 帖子:引入第三张表:
CREATE TABLE posts (id BIGSERIAL PRIMARY KEY, title TEXT);
CREATE TABLE tags (id BIGSERIAL PRIMARY KEY, name TEXT);
CREATE TABLE post_tags (
post_id BIGINT REFERENCES posts(id),
tag_id BIGINT REFERENCES tags(id),
PRIMARY KEY (post_id, tag_id)
);查询多对多关系
通过两次连接将所有数据组合起来:
SELECT p.title, t.name
FROM posts p
JOIN post_tags pt ON pt.post_id = p.id
JOIN tags t ON t.id = pt.tag_id
WHERE t.name = 'sql';何时反规范化
反规范化(复制数据)有时用于提升性能,例如缓存计算后的总数、保存全文列或使用物化视图。请先进行规范化,再根据测量结果决定是否反规范化。
连接与子查询
许多 JOIN 查询都可以改写为子查询,反之亦然。请选择可读性更好的写法;现代规划器通常会生成相同的执行计划。
外键不会自动强制执行
您必须使用 REFERENCES 声明外键。即使存在 FK 约束,是否为 FK 列建立索引仍由 YOUR 负责——请明确声明索引以提升连接性能。
回顾
连接会重新组合为保证完整性而拆分到多个表中的数据。
- 外键声明连接关系
- JOIN 在查询时还原规范化结构
- 一对多关系通过“多”一方的 FK 实现,多对多关系通过连接表实现
快速检查
在 users 和 orders 的一对多关系中,哪张表携带外键列?
常见问题解答
「为什么需要连接(关系模型回顾)」课时是免费的吗?
是的 — 「为什么需要连接(关系模型回顾)」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 SQL Academy 课程的其余内容,请升级到 CoddyKit PRO。 SQL Academy 课程共包含 4 节课。
「为什么需要连接(关系模型回顾)」这节课中我会学到什么?
回顾关系模型、规范化表和外键,并了解 JOIN 为何是跨表重新组装数据的桥梁。 你通过在浏览器中直接运行的动手代码来练习 SQL Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 SQL Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 SQL Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「为什么需要连接(关系模型回顾)」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 SQL Academy 课中编写并运行代码吗?
能。每节 SQL Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 为什么需要连接(关系模型回顾)
- INNER JOIN 的工作机制
- LEFT/RIGHT JOIN 与外连接
- 自连接与别名