关系代数
关系代数是关系数据库中的一种代数系统,用于描述和操作关系数据库中的关系。在关系代数中,关系是一个二维表格,由行和列组成,每行表示一个元组,每列表示一个属性。关系代数中的基本操作包括选择、投影、连接、并、差等。
元组:就是表中 行 的意思。
域
- 域是相同类型的值的集合
- 域可以是有限集,可以是无穷集
- 如果域D为有限集时,则称 D 中元素的个数为D的基数,记作|D|
笛卡尔积(直积)
笛卡尔积的概念
卡尔积是指从每个集合中选择一个元素组成的元组的集合。
定义:设 A,B 为集合,A 与 B 的笛卡尔积记作 AxB,即 AxB={<x,y> | x∈A∩y∈B}
|AxB| = m * n (基数数量)
m n
给定 个域 上的笛卡尔记作:,且
= {(}
每个元素 ( 都称为一个 -元组(简称元组)。
for example:
假设我们有2个域 ,要计算这2个域的笛卡尔积,即 。
因此,我们可以计算 如下:
,基数就是
关系
在关系代数中,一个 n 元关系指的是具有 n 个属性的关系。例如,一个包含学生信息的关系可以包括学生的学号、姓名、年龄等属性,如果这个关系有三个属性,即学号、姓名和年龄,那么这个关系就是一个三元关系。 总的来说,关系代数中的关系是一个二维表格,n 元关系指的是具有 n 个属性的关系。关系代数通过对关系进行各种操作,实现对数据库中的数据进行查询、插入、更新和删除等操作。
关系的性质
- 关系是笛卡尔积的子集,即元组(行)的集合,所以,关系(表)中的行的次序不重要,关系(表)中不能包含两个相同的元组(行)
- 列的顺序不重要
- 只考虑有序关系;关系每个属性必须是原子的。
关系的码
- 超码:超码是能唯一标识关系中元组的属性或属性组合,但不一定是最小的。换句话说,超码包含了候选码以及其他属性,可能包含冗余信息。超码是候选码的超集,可以用来唯一标识元组,但不是最小的唯一标识。
- 码:是一种极小(特殊)的超码。
- 主码:关系中用来唯一标识每个元组的属性或属性组合,通常作为表的主键使用。
- 码中的属性称为主属性,而不再任何码中出现的属性称为非主属性。
- 候选码(Candidate Key):候选码是可以作为主码的备选属性或属性组合。可以有多个候选码,但最终只能选择一个作为主码。
关系模式
关系模式的规范化,实质上就是概念的单一化。
关系模式概念对应与程序设计语言中的类型概念,是对关系型的描述,可以表示为
,简写为
- 关系模式名(理解为表名)
- (函数依赖):函数依赖描述了关系中属性之间的依依赖通常表示为X→ Y,表示属性集合X的取值决定了属性集合 Y 的取值。依赖关系,即一个属性的值决定另一个属性的值。
- (属性域) 为到的映射,属性域是关系中属性的取值范围,即属性可以取的所有可能值的集合。属性域可以是数字、字符串、日期等不同类型的数据。
- 为关系模式的诸属性集合,即关系中包含的属性。(字段集合)
- 为属性名,每个属性都有一个唯一的名称。属性名描述了关系中存储的数据的特征或属性
for example:
考虑一个关系模式 R(学生ID, 姓名, 年龄, 课程, 成绩),其中:
-
U = {学生ID, 姓名, 年龄, 课程, 成绩} 表示关系模式包含了这些属性
-
DOM = {整数, 字符串} 表示属性的取值范围分别为整数和字符串
-
F 可以包含各种函数依赖,例如:
学生ID → 姓名 表示学生ID 唯一确定了学生的姓名学生ID,课程 → 成绩 表示学生ID 和课程 唯一确定了学生在某门课程的成绩
ER图向关系模型的转换(考试)
- 识别实体和属性
- 首先,识别 ER 图中的实体(Entity)和属性(Attribute)。
- 每个实体对应一个关系表,每个属性对应表中的一个字段。
- 确定主键
- 为每个实体确定主键(Primary Key),通常是实体的唯一标识符。
- 主键可以是单个属性,也可以是多个属性的组合。
- 处理关系
- 处理 ER 图中的关系(Relationship),将其转换为外键(Foreign Key)。
- 如果两个实体之间存在一对一或一对多关系,可以在一个实体的表中添加另一个实体的主键作为外键,以建立关联。
- 对于两个实体间的1:n联系,转换关系模型的原则是:将1方的主码放到n方实体对应的关系模式中作为外码,联系属性一并加入到实体对应的关系模型中(冗余字段设计,减少查询,提高查询效率,存在一致性问题)。
......
做题解析:主要是给出 实体、联系。
完整性约束规则
实体完整性
关系R的所有元组在主码上的值必须唯一,并且主码不能取空值。
参照完整性规则
典型的案例就是FK外码。
用户自定义的完整性规则。
设计人员自行定义数据存储规则。
关系代数的5种基本运算
选择运算
从关系中选择满足指定条件的元组,通常表示为 ,其中条件是一个逻辑表达式。
设 是一个关系, 是一个公式,涉及
- 运算对象,常量或属性名
- 算术比较运算符,<、≤、=、≥、>、≠
- 逻辑运算符
选择 是 中使得公式 为真的元组 的集合。 元组 使得公式 为真意指当我们将 中所有的属性名用 的对应属性值替换时,公式 为真。用 表示元组 使得公式 为真,则
公式 理解成条件即可。
选择运算是一个 行运算,生成一个新关系。
For example:
上图中, 对于B属性列表,只要其值 就满足条件 .
投影运算
用于从R中选择出若干属性列组成新的关系(默认去重),列运算,行删除。通常表示为:
- 为中的属性列表
- 结果为只包含中某些列的新的关系
- 结果要去掉重复元组
并运算
并(Union):并运算用来将两个关系中的元组合并成一个新的关系,去除重复元组。并运算要求两个关系的属性集合必须相同。
差运算
差(Difference):差运算用来从一个关系中删除另一个关系中的元组,生成一个新的关系。差运算通常表示为 R - S,表示从关系 R 中去除关系 S 中的元组。
笛卡尔积
两个集合,表示为X × Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员。
交运算
除运算
关系代数中的除运算是一种相对较复杂的操作,用于解决除法相关的查询问题。在关系代数中,关系除运算表示为 R ÷ S,它的含义是在关系 R 中找出所有不在关系 S 中的元组。除运算的结果是一个新的关系,包含了满足条件的元组。
,
除运算的具体步骤如下:
- 确定两个关系 R 和 S,它们的属性集合必须相同。
- 对于关系 R 中的每个元组,检查是否存在一个元组在关系 S 中与之匹配。如果不存在匹配的元组,则将该元组添加到结果关系中。
- 最终得到的结果关系包含了满足条件的元组,即在关系 R 中存在,但在关系 S 中不存在的元组。 除运算通常用于解决一些复杂的查询问题,例如找出某个关系中满足一定条件但不在另一个关系中的数据。
在实际数据库查询中,除运算的使用相对较少,因为它通常需要对关系进行比较耗时的计算。
For example:
假设有两个关系 R 和 S,它们的属性集合相同,分别如下: 关系 R 包含元组 (1, 'Alice'), (2, 'Bob'), (3, 'Charlie'), (4, 'David') 关系 S 包含元组 (1, 'Alice'), (3, 'Charlie') 现在我们进行 R ÷ S 的除运算,即找出在关系 R 中存在但在关系 S 中不存在的元组。 首先,我们对关系 R 中的每个元组进行检查:
- 元组 (1, 'Alice') 在关系 S 中存在,所以不满足条件,排除
- 元组 (2, 'Bob') 在关系 S 中不存在,满足条件,保留
- 元组 (3, 'Charlie') 在关系 S 中存在,所以不满足条件,排除
- 元组 (4, 'David') 在关系 S 中不存在,满足条件,保留
最终,除运算的结果为新的关系,包含满足条件的元组: 结果关系为 (2, 'Bob'), (4, 'David') 这就是一个简单的除运算的例子,展示了如何从一个关系中找出不在另一个关系中的元组。
连接运算
连接运算是关系代数中的一种基本操作,用于将两个关系中的元组进行组合,生成一个新的关系。连接运算通常基于两个关系中的共同属性进行匹配,可以是等值连接或自然连接。
等值连接
等值连接(Equi-Join)是连接运算中最常见的形式,它基于两个关系中的共同属性进行匹配。两个关系中的共同属性值相等的元组会被组合成一个新的元组。等值连接通常表示为
,
其中条件是两个关系中共同属性的等值条件。
举个简单的例子:
假设有两个关系 R 和 S,分别如下:
关系 R 包含元组 (1, 'Alice'), (2, 'Bob'), (3, 'Charlie')
关系 S 包含元组 (1, 'Math'), (2, 'Science'), (3, 'History')
现在我们进行 的等值连接操作,即基于两个关系的第一个属性进行匹配。
在这个例子中,我们基于关系 R 和 S 的第一个属性进行匹配,找出共同属性值相等的元组:
- 元组 (1, 'Alice') 和 (1, 'Math') 匹配,生成新元组 (1, 'Alice', 'Math')
- 元组 (2, 'Bob') 和 (2, 'Science') 匹配,生成新元组 (2, 'Bob', 'Science')
- 元组 (3, 'Charlie') 和 (3, 'History') 匹配,生成新元组 (3, 'Charlie', 'History')
最终,等值连接的结果为新的关系,包含了匹配的元组:
结果关系为 (1, 'Alice', 'Math'), (2, 'Bob', 'Science'), (3, 'Charlie', 'History')
自然连接运算
基于两个关系中的共同属性进行匹配,并且自动去除重复的属性。自然连接会将两个关系中具有相同属性名的属性进行等值比较,然后生成一个新的关系。
表示为
举个简单的例子:
假设有两个关系 R 和 S,分别如下:
关系 R 包含元组 (1, 'Alice', 25), (2, 'Bob', 30), (3, 'Charlie', 28)
关系 S 包含元组 (1, 'Math', 'A'), (2, 'Science', 'B'), (3, 'History', 'C')
现在我们进行 R ⨝ S 的自然连接操作,基于两个关系中相同属性名的属性进行匹配。
在这个例子中,关系 R 和 S 中都有第一个属性名为 ID,所以这个属性将用于连接:
- 元组 (1, 'Alice', 25) 和 (1, 'Math', 'A') 匹配,生成新元组 (1, 'Alice', 25, 'Math', 'A')
- 元组 (2, 'Bob', 30) 和 (2, 'Science', 'B') 匹配,生成新元组 (2, 'Bob', 30, 'Science', 'B')
- 元组 (3, 'Charlie', 28) 和 (3, 'History', 'C') 匹配,生成新元组 (3, 'Charlie', 28, 'History', 'C')
最终,自然连接的结果为新的关系,包含了匹配的元组:
结果关系为 (1, 'Alice', 25, 'Math', 'A'), (2, 'Bob', 30, 'Science', 'B'), (3, 'Charlie', 28, 'History', 'C')
注意:
- 当 R 和 S 不具有相同的属性则自然退化为笛卡尔积。
关系代数表达式
-
列出系编号为MA(数学系)的所有学生的详细信息
-
列出所有课程的课程号、课程名和学分
-
列出年龄不超过45岁的所有副教授的姓名、性别和年龄。
....