0Pricing
SQL Academy · 课时

为什么需要连接(关系模型回顾)

回顾关系模型、规范化表和外键,并了解 JOIN 为何是跨表重新组装数据的桥梁。

为什么需要连接(关系模型回顾) 是 CoddyKit 上的免费 SQL Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 SQL Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 SQL Academy 课程共包含 4 节课。

一图看懂规范化

不要复制数据,而是将数据拆分到多个表中:

  • users — id、name、email
  • orders — 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 会:

  1. 计算两个表的交叉乘积(将表 A 的每一行与表 B 的每一行配对)
  2. 只保留 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 为什么需要连接(关系模型回顾)
  2. INNER JOIN 的工作机制
  3. LEFT/RIGHT JOIN 与外连接
  4. 自连接与别名
← 返回 SQL Academy