LabHub
学习 学习路径 课程

数据库概念

关系模型 — 让一张表只说一件事

在 LabHub 中继续学习

一句话总结

关系模型以行列表格表示数据,并通过键和约束让数据自行遵守规则。

概念图: 一句话总结 · 核心概念 · 规范化 · 下个练习

核心概念

SQL 是声明式的:写出 WHERE status = 'paid' 后,由优化器选择访问方式。主键唯一且非 NULL;候选键也应保留唯一约束;外键保证引用完整性。

NULL 表示未知,因此 NULL = NULL 的结果是未知,WHERE email = NULL 不会返回行,应使用 IS NULLcount(*) 统计全部行,count(email) 忽略 NULL,NOT IN 中出现 NULL 也会改变结果。

金额应使用 numeric。无时区类型是 timestamp,真实时间点应使用 timestamptz。类型与键难以变更,应优先认真设计。

规范化

一列只放一个值,所有列依赖完整主键,非键列不能决定其他非键列。第一范式避免 "010-1111-2222, 010-3333-4444" 这种多值;主键为 (주문번호, 상품번호) 时,商品名只依赖部分键,违反第二范式;우편번호 决定 도시 则违反第三范式。

读取远多于写入且值几乎不变时可有意复制历史事实。当前事实应引用,当时事实可复制。

下个练习

在 PostgreSQL 16 中查询模式,并亲自验证 = NULL 为什么不能找出 NULL 邮箱。