ER 图中的递归关系

2025年6月24日 | 阅读 7 分钟

众所周知,在研究 数据模型关系数据库 时,递归关系主要指实体自身之间存在关系的情况。这意味着同一实体类型的实例可以轻松连接,同时在连接中扮演不同的角色。因此,涉及两种不同类型的实体,递归关系通常侧重于单个实体类型参与关系一次以上的情况。

Recursive Relationship in ER Diagrams

组织结构是一个常见且易于理解的例子。在一个公司中,一个员工可以有效地监督其他几个员工。尽管此设置中的所有个人都被归类为员工,但他们也扮演着不同的角色——一个人充当经理,而其他人则分别是下属。这种内部层级结构,其中同一组的成员以不同的身份进行交互,就说明了递归关系。

此外,在处理同一类别内的层级和依赖序列结构时,此类关系非常重要。它们有助于有效地组织数据,形成自然的层级或连接链,例如家谱、组织结构图或文件目录。使用递归关系可以更准确、更高效地在选定的数据库集中对现实世界系统进行建模。

理解和应用递归关系的主要优势在于它们能够简单且逻辑地反映复杂结构。它们允许系统轻松地表示静态数据以及现实世界场景的动态和分层性质。无论是处理监督、指导、分类,还是任何同类数据元素链接到同类其他元素的场景,递归关系都为数据建模的清晰性和组织性提供了强大的工具。

ER图

Recursive Relationship in ER Diagrams

ER图代表实体关系图。当我们使用图表绘制实体之间的关系时,它被称为实体关系图。ER图仅用于帮助数据库管理员理解。ER图不能直接在计算机上使用。ER图被转换为表格形式,然后使用任何查询语言将其插入计算机。在ER图中,我们使用属性、实体以及实体之间的关系。我们使用椭圆形表示实体,使用菱形表示实体之间的关系。

基数

两个实体集之间可以存在的关系的数量称为 基数。集合中项的数量在数学上被称为其基数。数据库管理员可以使用基数来计算值和表。数据库中的基数通常通过强调一个对象相对于另一个对象的出现频率来例示两个不同表中的数据之间的关系。

由于基数在不同表或实体之间建立了有组织的链接,因此它在数据库中至关重要。这会显著影响查询执行计划——用户为查找和访问数据库系统中的数据可能采取的一系列操作。一个组织良好的查询执行策略可以使消费者更容易快速找到他们所需的信息。数据库管理员可以使用 基数模型 为数据库执行各种任务,但公司通常使用它来评估客户或库存数据。

映射基数,也称为 基数比,在数据库中是指通过特定关系集可以连接到另一个实体的实体数量。虽然它们有助于描述包含两个以上实体集的多个关系集,但 映射基数 在定义二元关系集时最为有用。

DBMS中基数的类型

Recursive Relationship in ER Diagrams
  • 一对一基数
  • 多对一基数
  • 一对多基数
  • 多对多基数

递归关系

如果两个实体之间存在关系,并且它们都属于同一实体类型,那么这称为递归关系。我们可以说同一实体集之间的关系称为递归关系。在ER图中,我们可以使用一个实体进入并退出自身来表示递归关系。在将ER图映射到表时,我们必须考虑表中的外键来映射递归关系。

递归关系可以有很多例子。

例如,如果一个男孩娶了一个女孩,而他们都属于人类实体集,那么这称为递归关系。

因此,我们可以间接地说,如果一个实体在关系中因不同的角色而出现一次以上,那么这称为递归关系。在上面的例子中,person实体将用于男孩,然后,另一方面,它将用于女孩,并且它们之间将存在关系。

示例

我们可以通过组织案例研究来理解递归关系。在一个组织中,我们有员工和CEO。任何成功的组织都遵循员工层级结构,员工按级别安排,并向其主管汇报。我们在组织中可以有两种关系角色:主管和下属。在一个组织中,每个员工最多只能有一个主管,但一个主管可以监督多个下属。假设我们有一个名为“reporting”的关系,连接主管和下属。

所以,ER图看起来会是这样

Recursive Relationship in ER Diagrams

关系度为一,表示为递归关系,递归关系也称为一元关系。我们可以在下面的几点中讨论不同角色的基数

  • 下属的最小基数可以是零,因为公司CEO不能是下属。
  • 下属的最大基数可以是 ONE,因为最多允许一个主管成为下属。
  • 主管的最小基数可以是 ZERO,因为公司下属不能是其他员工的主管。
  • 主管的最大基数可以是 N,其中一个主管可以被允许管理 N 个员工,而 N 可以是公司总工作员工数。

为了管理这些关系,每个记录中都会有一个作为经理编号的外键。因此,样本表实体看起来会是这样

我们将看到许多一元或递归关系的例子,它们是以下几种

示例 1

一个人可以有很多孩子,人与孩子之间的关系是一元的,因为他们都属于人类的同一种实体类型。

示例 2

一个班长可以管理班里的多个学生,而他本身也是一个学生。因此,管理关系是一元或递归关系,因为班长和其他学生都属于同一个实体集。

示例 3

当组织A队和B队之间的比赛时,这也是递归关系的一个例子,因为两支球队都属于同一个实体集“球队”,并且关系是“比赛”。

示例 4

在机器中,一个零件是由不同小零件组合而成的,所以这也是一种递归关系。

数据库中递归关系的实际生活示例

  1. 员工与经理的设置:在此示例中,让我们考虑一下公司通常如何运作。每个员工可能都有一个经理,但该经理也是员工,对吧?所以,我们不需要为这个设置两个不同的表。我们可以只使用一个“Employee”表。该表中的每个人都有一个 ID,还有一个名为“manager ID”的列,该列引用同一表中的另一个员工的 ID。然而,这种设置是递归关系的一个很好的例子。它分别连接了同一表中的行。
  2. 文件夹和子文件夹:如果一个人使用过电脑,那么他们可能熟悉文件夹,而文件夹又可以包含其他文件夹。这些被称为子文件夹。而在这些子文件夹中,可能还有更多的文件夹,它会一直下去。要在数据库中对此进行建模,我们将使用一个“Folder”表,其中每个文件夹都可以指向同一表中的一个“parent”文件夹。这种指向自身的链接是一种有效的递归关系。
  3. 评论和回复:考虑 Reddit 或 YouTube 网站上的评论部分。有人发表评论,其他人可以回复。但这些回复也是评论,人们也可以回复它们。一个评论可能作为回复与另一个评论相关联,从而形成一个链条。在数据库中,我们将使用一个单一的“Comments”表,其中每个评论可能有一个“parent comment ID”,它引用同一表中的另一个评论。这是另一种清晰有效的递归链接示例。

常见问题解答/FAQ

问题 1:ER图中的递归关系是如何描绘的?

答案:递归关系在 ER 图中通过将一个实体与其自身连接来描绘。这主要通过一条循环回同一实体的关系线来实现。为了阐明连接,每条线都标有实体在关系中所扮演的特定角色。

  • 例如,在一个公司中,一名员工可能会管理其他员工,因此图示将“Employee”实体与其自身连接,角色为“Manager”和“Subordinate”。

问题 2:递归关系是什么意思?

答案:当单个表中的记录通常相互连接时,就会发生递归关系。简单来说,当一个项目与同类项目的另一个项目相关联时,就会创建它。例如,在员工数据库中,一名员工可以监督另一名员工。两者都属于同一组员工,但在关系中扮演着不同的角色。

问题 3:列举一个递归关系集的例子。

答案:想想员工在公司中是如何工作的。一个员工可能是另一个员工的老板。即使他们都是员工,一个人监督另一个人。这种同群体人员之间的联系就是递归关系。然而,另一个例子是在社交媒体中,一个用户可以关注另一个用户或成为另一个用户的“朋友”。两者都是用户,但他们通过“friend”或“follower”等关系连接。


下一话题DBMS的结构