关系型数据库模型
在上一章中,你了解了数据模型的基本概念和分类方式,这一节我们将深入介绍最常见、最经典的数据模型——关系型数据库模型。你将学习它的核心思想、基本结构、组成元素,以及它在实际数据库系统中的应用方式。
什么是关系型数据库模型?
关系型数据库模型(Relational Data Model),是一种用“表格”来组织和表示数据的数据模型。这种模型由美国学者 Edgar F. Codd(埃德加·科德)在 1970 年提出,至今仍是主流数据库系统(如 MySQL、PostgreSQL、SQL Server、Oracle 等)所采用的基础模型。
在关系模型中:
- 一张 表(Table) 就代表一个 关系(Relation);
- 表中的每一行,叫做一条 记录(Tuple);
- 表中的每一列,叫做一个 字段 或 属性(Attribute);
- 表本身的结构,称为 关系模式(Relation Schema)。
你可以把它类比为 Excel 表格:每一张表是一个 Sheet,每一行是一个数据记录,每一列是一个字段。
关系模型的基本概念
关系(Relation)
“关系”就是一张表,用来存储某一类结构化的数据。
例如,你有一个“学生信息表”(Student)如下:
学号 | 姓名 | 班级 |
---|---|---|
1001 | 小明 | 一年级一班 |
1002 | 小红 | 一年级二班 |
1003 | 小刚 | 一年级一班 |
这张表就是一个关系,它的结构由字段组成,数据由记录填充。
元组(Tuple)
每一行数据,就是一个元组(也叫记录)。例如:
(1001, 小明, 一年级一班)
这个元组表示一个学生的完整信息。
属性/字段(Attribute)
每一列就是一个属性,也就是字段。例如“学号”、“姓名”、“班级”就是属性。属性的数据类型需要定义清楚,比如学号是整数、姓名是字符串等。
以下是关系型数据库中最常见的几类数据类型(以 SQL 标准为例,略去各数据库差异):
类型 | 示例值 | 说明 | |
---|---|---|---|
数值类型 | INT | 123 | 整数,适用于编号、计数等 |
BIGINT | 922337203 | 更大的整数范围 | |
DECIMAL | 12.34 | 精确小数(适用于金融) | |
FLOAT | 3.14159 | 近似小数(速度快但不精确) | |
字符串类型 | CHAR(n) | 'CN' | 固定长度字符串(性能好) |
VARCHAR(n) | '北京' | 可变长度字符串(节省空间) | |
TEXT | 大段文字 | 存放长文本,比如评论、文章内容等 | |
日期和时间类型 | DATE | 2025-04-17 | 日期(不含时间) |
TIME | 14:30:00 | 时间(不含日期) | |
DATETIME | 2025-04-17 14:30:00 | 日期+时间 | |
TIMESTAMP | 同上 | 可记录时间戳(有时区支持) | |
布尔类型 | BOOLEAN / BOOL | TRUE 或 FALSE | 通常表示“是否启用”、“是否通过”等 |
域(Domain)
属性可以取值的合法范围叫做“域”。例如:
- 姓名字段的域可能是“所有 UTF-8 字符串”;
- 学号的域可能是“正整数”;
- 出生日期的域是“合法的日期”。
域的定义有助于确保数据的合法性。
主键(Primary Key)
主键(Primary Key)是用来唯一标识表中一行记录的字段(或字段组合)。你可以把主键理解成“身份证号”,主键具有以下特点:
- 唯一性:不能重复,每一行都必须有不同的主键值;
- 非空性:不能是空(NULL);
- 稳定性:值尽量不要变,比如学号、工号、订单号;
- 通常是某个字段(或多个字段组合);
- 每个表只能有一个主键。
例如在学生表(Student)中,“学号”就可以作为主键,因为每个学生的学号都是唯一的。
学号 | 姓名 | 班级 |
---|---|---|
1001 | 小明 | 一年级一班 |
1002 | 小红 | 一年级二班 |
1003 | 小刚 | 一年级一班 |
外键(Foreign Key)
外键(Foreign Key)是用于建立两个表之间联系的字段。外键本身也是一个字段,并且它引用自另一个表的主键,因此可以用来建立两个表之间的关系。外键具有以下特点:
- 外键的值必须是另一个表中主键的值,或者是 NULL;
- 外键可以有多个。
我们将前面学生表(Student)中的“班级”字段修改为“班级ID”,如下所示:
学号 | 姓名 | 班级ID(外键) |
---|---|---|
1001 | 小明 | 1 |
1002 | 小红 | 2 |
我们再建一个“班级表”(Class):
班级ID | 班级名 |
---|---|
1 | 一年级一班 |
2 | 一年级二班 |
那么,学生表中的“班级ID”(Student.班级ID
)就是“班级表”中主键的外键(它引用的是 Class.班级ID
)。外键的存在使得数据可以关联查询,而不是冗余存储。
外键告诉数据库:“学生表中的班级ID,必须是班级表中已经存在的ID。”
这样做的好处是:数据更一致、更规范。比如你就不能插入一个“班级ID=999”的学生记录,因为班级表里没有这个班。
候选键(Candidate Key)
候选键是指在一张表中,可以唯一标识每一行记录的字段(或字段组合)。也就是说,候选键 = 有资格成为主键的字段。在多个候选键中,你可以选择其中一个作为主键,其他的就是“备用”的。
假设你有这样一个学生表:
学号 | 身份证号 | 姓名 | 手机号 |
---|---|---|---|
1001 | 11010120000101 | 小明 | 13812345678 |
1002 | 11010120000202 | 小红 | 13987654321 |
在这个表中,以下字段都有可能唯一标识一个学生:
- 学号(比如 1001)
- 身份证号(每个人唯一)
- 手机号(一般也唯一)
所以这些字段都是候选键。你可以选其中一个(比如学号)作为主键,其它就是候选键,但不是主键。
关系操作:集合思维
关系模型是以集合为基础的,这意味着你可以用集合操作(如选择、投影、连接、并集、差集等)来处理表格数据。
在 SQL 中,这些操作被转化为各种 查询语句(SELECT
、JOIN
、UNION
等)。
关系模型的优势
- ✅ 结构清晰:表结构简单,易于理解和维护;
- ✅ 高度标准化:支持 SQL 语言,跨平台通用;
- ✅ 数据完整性好:主键、外键、约束机制完善;
- ✅ 支持事务:保证操作的一致性和可靠性;
- ✅ 适合结构化数据:适用于大多数业务系统,如电商、财务、库存等。
你在数据库中如何使用关系模型?
在实际使用关系型数据库时:
- 你会设计表结构(建模);
- 使用 SQL 语言来创建表(如
CREATE TABLE
); - 通过
INSERT
插入数据,SELECT
查询数据; - 设置主键、外键、索引等,确保数据正确性和查询效率;
- 使用
JOIN
等操作连接多个表,实现复杂业务逻辑。
这些过程,正是关系模型在实际系统中的体现。
小结
本节你学习了:
- 关系型数据库模型的由来与基本定义;
- 表(关系)、元组、属性、主键、外键、候选键等核心概念;
- 关系模型的优点与适用场景;
- 如何在实际项目中使用关系模型建表、管理数据。
关系型数据库模型是数据库学习的基石。掌握这些基础知识,将帮助你更好地理解后续的数据库设计、SQL 查询和规范化理论等内容。