数据模型与关系理论
关系模型由 E.F. Codd 于 1970 年提出,是当今绝大多数数据库的理论基础。它用二维表表示数据,用集合运算描述查询,将「数据如何存储」与「数据如何查询」解耦。
核心概念
关系模型要求每一行唯一(由主键保证),且列值满足原子性——这是一切约束与规范化的起点。
键与约束
- 主键(Primary Key):唯一标识一行的列或列组合,非空且唯一。
- 外键(Foreign Key):引用另一张表的主键,用于维护参照完整性。
- 唯一键(Unique Key):保证列值不重复,允许一个
NULL(各实现略有差异)。 - 非空(NOT NULL):强制列必须有值。
- 检查约束(CHECK):限定列取值满足某个条件。
关系运算
关系代数提供了一组封闭的运算,SQL 是对它们的实现:
Tip
理解「表是集合」这一心智模型非常重要:它解释了为什么 NULL 参与比较会得到 UNKNOWN 而非 TRUE,也解释了连接为何可能放大行数(笛卡尔积)。
ACID:关系型数据库的承诺
关系型 vs 非关系型
Warning
「NoSQL 不需要设计 Schema」是一种误解。文档模型只是把约束从数据库移到了应用层,字段命名、类型与版本仍需严格约定,否则数据会迅速腐化。
小结
- 关系模型以表、行、列、键与约束描述数据,是一切 SQL 数据库的共同根基。
- 主键保证实体完整性,外键保证参照完整性,二者共同维护数据的一致性。
- SQL 是关系代数的工程化实现;理解集合语义能避免许多陷阱。