数据库关系模型的总结
关系模型的核心概念
(1) 关系(Relation)
定义:关系是一个二维表(Table),由行(记录)和列(属性)组成。
数学表示:关系是元组(Tuple)的集合,每个元组代表一行数据。
示例:
StudentID | Name | Age | Major |
---|---|---|---|
101 | Alice | 20 | Computer |
102 | Bob | 22 | Mathematics |
(2) 属性(Attribute)
域 定义:
-
域(Domain)是一组具有相同数据类型的值的集合,它定义了某个属性(列)可以取的所有可能值。
-
在关系模型中,每个属性都必须属于某个域,域限制了该属性的取值范围。
特点
-
原子性:域中的值是不可再分的最小单位(如整数、字符串等)。
-
唯一性:同一个域不能包含重复的值。
-
约束性:域可以定义数据的类型和约束条件(如
Age
必须是正整数)。
(3) 元组(Tuple)
即表的行,代表一条具体的数据记录。
示例:(101, "Alice", 20, "Computer")
是一个元组。
(4) 主键(Primary Key)
唯一标识一个元组的属性(或属性组合),不能重复,不能为NULL
。
示例:StudentID
是主键。
(5) 外键(Foreign Key)
一个表中的属性,引用另一个表的主键,用于维护表之间的关系。
示例:Enrollment
表中的 StudentID
是外键,引用 Student
表的主键。
(6)笛卡尔积:
笛卡尔积(Cartesian Product)是两个集合的所有可能有序对的组合。
在关系数据库中,笛卡尔积用于描述多个关系的组合方式,它是关系代数中连接(Join)操作的基础。
数学表示:
给定两个集合 A和 B,它们的笛卡尔积 A×B,A×B 定义为:
A×B={(a,b)∣a∈A,b∈B}A×B={(a,b)∣a∈A,b∈B}
即,A×B,A×B 包含所有可能的 (a,b)(a,b) 组合。
在关系数据库中的应用:
关系数据库中的表可以看作元组的集合,因此两个表的笛卡尔积就是所有可能的行组合。
笛卡尔积通常用于多表查询,但如果不加约束(如 WHERE
或 JOIN
),会产生大量无意义的数据。
关系模型的数学基础
(1) 关系代数(Relational Algebra)
关系代数是一组对关系进行操作的运算符,包括:
选择(σ):按条件筛选行,如 σ(Age > 20)(Student)
。
投影(π):选择特定列,如 π(Name, Major)(Student)
。
并集(∪)、交集(∩)、差集(−):集合运算。
连接(⋈):合并两个关系的相关行,如 Student ⋈ Enrollment
。
笛卡尔积(×):所有可能的组合。
(2):详解:
(1) 选择(Selection, σ)
作用:按条件筛选行。
符号:σ<sub>条件</sub>(R)
-
示例:
-
查询年龄大于20的学生:
σ<sub> Age>20 </sub>(Students)
StudentID
Name
Age
102 Bob 22
-
(2) 投影(Projection, π)
作用:选择指定的列。
符号:π<sub>属性列表</sub>(R)
-
示例:
-
查询所有学生的姓名和专业:
π<sub> Name, Major </sub>(Students)
结果:
Name
Major
Alice Computer Bob Mathematics
-
(3) 并集(Union, ∪)
作用:合并两个关系(表)的所有元组,去重。
要求:两个关系必须具有相同的属性(列结构)。
-
示例:
-
查询所有学生和教师的姓名:
π<sub>Name</sub>(Students) ∪ π<sub>Name</sub>(Teachers)
-
(4) 差集(Set Difference, −)
-
作用:返回属于第一个关系但不属于第二个关系的元组。
-
示例:
-
查询没有选修任何课程的学生:
π<sub>StudentID</sub>(Students) − π<sub>StudentID</sub>(Enrollments)
-
(5) 笛卡尔积(Cartesian Product, ×)
-
作用:返回两个关系的所有可能组合。
-
示例:
-
计算
Students
和Courses
的所有组合:Students × Courses
结果:
StudentID
Name
CourseID
CourseName
101 Alice 1 Math 101 Alice 2 Physics 102 Bob 1 Math 102 Bob 2 Physics
-
3. 扩展关系运算符
(1) 连接(Join, ⋈)
-
作用:基于条件合并两个关系的元组。
-
类型:
-
自然连接(Natural Join, ⋈):自动匹配相同属性名的列。
-
θ-连接(Theta Join, ⋈<sub>θ</sub>):自定义连接条件(如
=
,>
,<
)。
-
-
示例:
-
查询学生及其选修的课程:
Students ⋈ Enrollments
- 等价于:
-
σ<sub>Students.StudentID = Enrollments.StudentID</sub>(Students × Enrollments)
-
(2) 重命名(Rename, ρ)
-
作用:修改关系或属性的名称。
-
示例:
-
将
Students
重命名为S
:ρ<sub>S</sub>(Students)
-
(3) 除法(Division, ÷)
-
作用:查询满足“所有”条件的元组(如“选修了所有课程的学生”)。
-
示例:
-
查询选修了所有课程的学生:
π<sub>StudentID, CourseID</sub>(Enrollments) ÷ π<sub>CourseID</sub>(Courses)
-
3. 关系的约束(完整性规则)
(1) 实体完整性(Entity Integrity)
主键不能为NULL
,确保每条记录唯一可识别。
(2) 参照完整性(Referential Integrity)
-
外键的值必须是另一个表的主键值,或者为
NULL
。 -
如果外键引用被删除(如删除被引用的主键记录),数据库可以采取以下策略:
-
RESTRICT
/NO ACTION
(默认):阻止删除(报错)。 -
CASCADE
:级联删除(删除引用该主键的所有外键记录)。 -
SET NULL
:将外键设为NULL
。 -
SET DEFAULT
:将外键设为默认值
-
(3) 用户定义的完整性(User-defined Integrity)
定义
由用户(开发者)定义的业务规则,通常通过 CHECK
、UNIQUE
、NOT NULL
等约束实现。
确保数据符合特定的业务逻辑(如年龄必须大于 0,邮箱必须包含 @
等)
sako——