DBMS 中的关系类型和关系集
在关系数据库中,理解关系概念至关重要。关系用于管理数据之间的交互方式。关系有助于定义数据库内数据的交互方式。关系类型和关系集的概念用于构建这些交互,从而实现有意义且高效的数据存储和检索。
在本章中,我们将通过示例探讨这些概念,以阐明其目的和意义。
关系类型的基本概念
关系类型指数据库系统中实体之间关联的具体方式。您可以将它们视为不同数据表之间建立连接的规则或“种类”。每种关系类型定义了一个实体如何与另一个实体交互,从而指导数据链接的结构和逻辑。
为了掌握基础知识,请考虑数据中的关系类似于现实生活中的连接。例如,在学校数据库中,Students(学生)和Courses(课程)是两个独立的实体。它们之间的关系可以定义为Enrollment(注册)。这种关系显示哪些学生注册了哪些课程。这里,Enrollment是链接 Student 实体集与 Course 实体集的关系类型。
关系类型的特征
在关系中,我们可以看到以下几个特征:
- Cardinality(基数)− 定义参与的实体数量。这些可以是一对一、一对多或多对多关系。
- Attributes(属性)− 有时,关系本身具有属性。例如,注册日期可以是“enrollment”关系类型的属性。
- Participation Constraints(参与约束)− 指定实体在关系中的参与是总参与还是部分参与。
关系集详解
接下来,我们重点关注关系集。relationship set(关系集)本质上是同一类型关系的集合。它是满足关系类型的所有可能实体实例对(或组合)的具体实例。如果“enrollment”是我们的关系类型,那么学校中所有当前的enrollments(注册)集合就构成了关系集。
让我们再次查看学校数据库。如果有三个学生 Alice、Bob 和 Carlos 注册了两门课程 Math 和 Science,那么“enrollment”的关系集可能如下所示:
- Alice 注册了 Math
- Bob 注册了 Science
- Carlos 同时注册了 Math 和 Science
这里,该集合包含这些具体实例,映射出Student和Course实体集之间的活跃链接。
关系集示例
考虑“Works_On”关系。它需要Employee(员工)和Project(项目)关系。
Employee Relation(员工关系):
| Fname | Minit | Lname | Ssn | Bdate | Address | Sex | Salary | Super_ssn | Dno |
Project Relation(项目关系)
| Pname | Pnumber | Plocation | Dnum |
Works_On relation(Works_On 关系)
| Essn | Pno | Hours |
Attributes(属性)− 关系类型“Works_On”具有如“Hours”等属性,这表示员工在特定项目上工作的小时数。
Relationship Set(关系集)− 现在考虑 John,他在 Project X 上工作 20 小时,在 Project Y 上工作 10 小时。而 Jane 在 Project X 上花费 15 小时,在 Project Z 上花费 25 小时。因此,这些实例的集合形成了“Works_On”的关系集。

关系类型的度数
术语“degree of a relationship type”表示参与的实体类型的数量。本节涵盖最常见的度数:二元、三元和高阶关系。
二元关系
二元关系,正如其名所示,需要两个实体类型。“Works_On”示例是二元关系的经典案例,因为它连接了“Employee”和“Project”。
再举一个例子。假设在学校数据库中,“Teacher”和“Subject”实体类型之间的“Teaches”关系就是一个二元关系。
三元和高阶关系
关系可以更加扩展。三元关系涉及三个实体类型。例如,如果一家公司需要建模哪个“Employee”在哪个“Project”上为哪个“Client”工作,这另一个关系。它是一个三元关系。
在高阶关系中,复杂性会增加。我们可以想象一个四元链接,连接“Employee”、“Project”、“Client”和“Location”之间的关系。
关系类型的属性
正如我们所知,列是属性,它们不仅仅属于实体。关系类型可以拥有自己的属性,提供更多细节。
“Works_On”中的属性
正如我们在“Works_On”关系中看到的,名为“Hours”的属性非常重要。它们表示员工为项目投入的时间。如果 John 为 Project Z 工作 30 小时,则属性“Hours”会在链接 John 和 Project Z 的关系集条目中保存该数据。
映射基数
Mapping cardinalities 表示实体之间的关联数量。映射基数在准确描述现实世界约束方面发挥重要作用。
- One-to-One (1:1) − 一对一关系意味着集合 A 中的一个实体与集合 B 中的一个实体相关联。例如,每个“Principal”(实体类型)只有一个“School”(另一个实体类型)。
- One-to-Many (1 : N) − 一对多关系意味着集合 A 中的一个实体连接到集合 B 中的多个实体。在 eBook 示例中,每个“Employee”可能参与多个“Projects”。
- Many-to-Many (M : N) − 多对多关系意味着两个集合中的实体可以以多种方式连接。“Works_On”关系类型就是一个完美示例。员工可以参与不同的项目,项目也可以有多个员工。
结论
在本章中,我们详细解释了“relationship types”和“relationship sets”的概念。我们了解了它们在数据库中的重要性,以及它们如何阐释数据之间的连接。我们还探讨了基本定义,学习了如何在 ER 图中表示这些关系。
此外,我们还触及了关系类型属性和度数概念,并在本章结尾简要介绍了“mapping cardinalities”,并涵盖了这些概念在现实世界数据库建模中的工作方式。