第2章:关系数据库
数据库笔记
- 发布
- 篇幅
- 3,684 字 · 10 分钟
- 阅读
- – 次
关系,关系模式,关系数据库
关系
一些数学上的概念的回忆,和在数据库系统内的含义
DomainCartesian ProductRelation:- : 关系名
- : 关系的目/度
Attribute属性: 每一列的名字,比如学号、分数… 属性数=目数
Tuple元组: 集合中的一个元素Component分量:元素中的一个值
码
候选码
- 若关系中的某一属性组的值能唯一地标识一个元组,而其子集不能,则称该属性组为候选码。
- 简单情况:候选码只包含一个属性。
- 最极端情况:关系模式的所有属性组是候选码,称为全码(All-key)。
主码
若一个关系有多个候选码,则选定其中一个为主码。
主属性与非主属性
- 候选码的所有目的属性属性称为主属性(Prime Attribute)。
- 不包含在任何候选码中的属性称为非主属性(Non-Prime Attribute)或非码属性(Non-key Attribute)。
关系的类别
1. 基本关系(基本表或基表)
- 定义:实际存在的表,是实际存储数据的逻辑表示。
- 例子:
-
学生表(
Students):学号 姓名 年龄 性别 系名 202001 张三 20 男 计算机科学 202002 李四 21 女 数学 202003 王五 22 男 物理 -
课程表(
Courses):课程号 课程名 学分 C 001 数据库 3 C 002 高等数学 4 C 003 英语 2
-
2. 查询表
- 定义:查询结果对应的表。
- 例子:
-
查询“计算机科学系的学生”:
学号 姓名 年龄 性别 系名 202001 张三 20 男 计算机科学 -
查询“学分大于 3 的课程”:
课程号 课程名 学分 C 002 高等数学 4
-
3. 视图表
- 定义:由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据。
- 例子:
-
创建一个视图“计算机科学系学生选课情况”:
CREATE VIEW CS_Students_Courses AS SELECT Students.学号, Students.姓名, Courses.课程名 FROM Students, Courses WHERE Students.系名 = '计算机科学';-
查询视图:
学号 姓名 课程名 202001 张三 数据库
-
-
基本关系的性质
1. 列是同质的(Homogeneous)
- 每一列中的分量(即单元格中的值)是同一类型的数据,来自同一个域。
- 例子:在“学生表”中,“年龄”列的所有值都是整数类型,来自“年龄”这一数据域。
2. 不同的列可出自同一个域
- 虽然每列的数据类型相同,但它们代表不同的属性。
- 例子:在“学生表”中,“年龄”列和“学分”列都来自整数域,但分别代表学生的年龄和课程学分。
3. 每一列称为一个属性
- 属性是关系模型中列的术语,代表某种特征或数据项。
- 例子:在“学生表”中,“姓名”、“年龄”、“性别”等都是属性。
4. 不同的属性要给予不同的属性名
- 不能有两个列都叫“姓名”,必须分别命名为“中文姓名”和“英文姓名”(if needed)。
5. 行、列的顺序无所谓
- 将“学生表”中的“姓名”列和“年龄”列对调,表的内容和含义不变。
- 将“学生表”中的第一行和第二行对调,表的内容和含义不变。
6. 任意两个元组的候选码不能相同
- 在“学生表”中,“学号”是候选码,每个学生的学号必须唯一。
7. 分量必须取原子值
- 每个分量(单元格中的值)必须是不可再分的最小数据单位(例如一个整数或字符串)。
- 例子:在“学生表”中,“姓名”列的值必须是单个名字,不能是一个名字列表。
关系模式
1. 定义
- 关系模式是“型”,关系是“值”。关系模式是对关系的描述。
- 内容包括:
- 元组集合的结构
- 属性构成
- 属性来自的域
- 属性与域之间的映射关系
- 完整性约束条件
- 元组集合的结构
2. 关系模式的形式化表示
关系模式可以形式化地表示为:
- :关系名
- :组成该关系的属性名集合
- : 中属性所来自的域
- :属性向域的映射集合
- :属性间数据的依赖关系集合
- 简化表示:
- 关系模式通常可以简记为 或 。
- :关系名。
- :属性名。
- 域名及属性向域的映射通常直接说明为属性的类型和长度。
- 关系模式通常可以简记为 或 。
3. 关系模式与关系的区别
- 关系模式:对关系的描述,是静态的、稳定的。
- 关系:关系模式在某一时刻的状态或内容,是动态的、随时间不断变化的。
- 说明:
- 关系模式和关系在日常讨论中常笼统称为“关系”,需通过上下文加以区别。
关系数据库
- 定义:在一个给定的应用领域中,所有关系的集合构成一个关系数据库。
- 关系数据库的“型”与“值”
- 型:关系数据库模式,是对关系数据库的描述。
- 值:关系模式在某一时刻对应的关系的集合,通常称为关系数据库。
关系的完整性
关系间的引用
- 定义:在关系模型中,实体及实体间的联系都用关系描述,自然存在关系间的引用。
- 例子:
- 学生与专业:
- 学生(学号,姓名,性别,专业号,年龄)
- 专业(专业号,专业名)
- 学生关系引用了专业关系的主码“专业号”。
- 学生、课程与选修:
- 学生(学号,姓名,性别,专业号,年龄)
- 课程(课程号,课程名,学分)
- 选修(学号,课程号,成绩)
- 选修关系引用了学生关系的主码“学号”和课程关系的主码“课程号”。
- 学生内部的领导联系:
- 学生(学号,姓名,性别,专业号,年龄,班长【指的是这个学生所在班级的班长】)
- 学生关系引用自身的主码“学号”来表示班长关系。
- 学生与专业:
外码
定义
- 设 是基本关系 的一个或一组属性,但不是关系 的码。如果 与基本关系 的主码 相对应,则称 是 的外码(Foreign Key), 在这种情况下:
- 基本关系 被称作参照关系(Referencing Relation)
- 基本关系 被称作被参照关系(Referenced Relation)或目标关系(Target Relation):。
- 说明:
- 关系 和 不一定是不同的关系。
- 目标关系 的主码 和参照关系的外码 必须定义在同一个(或一组)域上。
- 外码并不一定要与相应的主码同名。当外码与相应的主码属于不同关系时,通常取相同的名字以便于识别。
例子
-
学生与专业:
- 学生关系:
学生(学号,姓名,性别,专业号,年龄)
其中,“专业号”是学生关系的外码。 - 专业关系:
专业(专业号,专业名)
其中,“专业号”是专业关系的主码。 专业关系是被参照关系,学生关系是参照关系。
- 学生关系:
-
选修关系:
- 选修关系:
选修(学号,课程号,成绩)
其中,“学号”、“课程号”(之一,不是合起来)是选修关系的外码。 - 学生关系:
学生(学号,姓名,性别,专业号,年龄)
其中,“学号”是学生关系的主码。 - 课程关系:
课程(课程号,课程名,学分)
其中,“课程号”是课程关系的主码。 学生关系和课程关系是被参照关系,选修关系是参照关系。
- 选修关系:
-
学生内部的领导联系:
- 学生关系:
学生(学号,姓名,性别,专业号,年龄,班长)
其中,“班长”是外码,引用了学生关系自身的主码“学号”。 - 学生关系既是参照关系,也是被参照关系。

- 学生关系:
关系的三类完整性约束
1. 实体完整性 Entity Integrity
若属性 A 是基本关系 R 的主属性,则属性 A 不能取空值(表示“不知道”、“不存在”或“无意义”的值)。
- 例子:
- 关系模式:
选修(学号,课程号,成绩) - 主码为“学号、课程号”,这两个属性均不能取空值
- 关系模式:
- 实体完整性规则是针对基本关系而言的。一个基本表通常对应现实世界的一个实体集。
- 现实世界中的实体是可区分的,即它们具有某种唯一性标识。
- 关系模型中以主码作为唯一性标识。
- 主码中的属性即主属性不能取空值。
- 主属性取空值,就说明存在某个不可标识的实体,即存在不可区分的实体,这与第 2 点相矛盾,因此这个规则称为实体完整性。
2. 参照完整性
- 若属性(或属性组) 是基本关系 的外码,它与基本关系 S 的主码 相对应(基本关系 和 不一定是不同的关系),则对于 中每个元组在 上的值必须为下面两种情况之一
- 取空值( 的每个属性值均为空值),代表 中的这个条目目前还不需要这个属性
- 等于 中某个元组的主码值,代表这个条目的属性必须要是有意义的(在 中存在)

当然如果 也是 的主码,那就不能取空值了,只能是第二种情况。
用户定义的完整性
- 针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求。
- 关系模型应提供定义和检验这类完整性的机制,以便用统一的系统的方法处理它们,而不需由应用程序承担这一功能。
示例:课程(课程号,课程名,学分)
- “课程号”属性必须取唯一值。
- 非主属性“课程名”也不能取空值。
- “学分”属性只能取值 。
关系操作与关系代数
关系代数
operand是关系,计算结果也是关系- 关系是集合,所以关系代数是集合的操作
operand有两类- 集合运算符:只从行的角度进行,行很行操作产生新的行
- 专门的关系运算符:不仅涉及行,还涉及列

运算必须要有意义。
使用的记号
规定只使用关系模式的结构 中的两样东西:关系名 和 属性名元组,也就是
这个关系模式中:
-
关系: 表示一个关系实例。
-
元组: 表示 t 是 R 的一个元组
-
分量: 表示元组 t 中属于属性 的一个分量
-
属性列/属性组:设 , 其中的每一个元素都是 R 的属性,则 是属性列或属性组, 表示所有属性去掉 A 后的剩余属性组
-
连接:
- ,, 称为元组的连接。
- 是一个 n + m 列的元组,前 n 个分量为 R 中的一个 n 元组,后 m 个分量为 S 中的一个 m 元组。
-
象集: 给定一个关系 R(X,Z),X 和 Z 为属性组。
- 当 时,x 在 R 中的象集(Images Set)为:
- 它表示 R 中属性组 X 上值为 x 的诸元组在 Z 上分量的集合。

- 当 时,x 在 R 中的象集(Images Set)为:
关系操作
1. 并
- 两个关系目数必须同
- 每目属性相同,对应的属性应取自同一个域
- 仍为 n 目关系,由属于 R或属于 S 的元组组成

2. 差
- 和 并 一样,目数、属性有要求,不然运算没有意义
- 仍为 n 目关系,由属于 R 而不属于 S 的所有元组组成

3. 交 Intersection
- 和前面一样,...
- 仍为 n 目关系,由既属于 R 又属于 S 的元组组成

4. 笛卡尔积
严格地讲应该是广义的 (Extended) 笛卡尔积
5. 选择
-
在关系 R 中选择满足给定条件的诸元组:
-
F:选择条件,是一个逻辑表达式,取值为“真”或“假”。
-
基本形式为:,其中:
- 表示比较运算符,可以是 ,,,, 或 。
-
在基本的选择条件上可以进一步进行逻辑运算(与、或、非)。
-
选择运算是从关系 R 中选取使逻辑表达式 F 为真的元组,是从行的角度进行的运算.

6. 投影
- 从关系 R 中选择若干属性列 组成新的关系:
- A:R 中的属性列。
- 投影操作主要是从列的角度进行运算。
- 投影之后不仅取消了原关系中的某些列,而且还可能取消某些元组(避免重复行)。
7. 连接
连接(Join)也称为 θ连接。
连接运算的含义
从两个关系的笛卡尔积中选取属性间满足一定条件的元组:
- A 和 B:分别为 R 和 S 上度数相等且可比的属性组。
- θ:比较运算符。
连接运算从 R 和 S 的广义笛卡尔积 中选取 R 关系在 A 属性组上的值与 S 关系在 B 属性组上的值满足比较关系 的元组。
等值连接(Equijoin)
当 θ 为“=”的连接运算称为等值连接。从关系 R 与 S 的广义笛卡尔积中选取 A、B 属性值相等的那些元组,即:
自然连接(Natural Join)
一种特殊的等值连接。
-
条件:
- 两个关系中进行比较的分量必须是相同的属性组。
- 在结果中把重复的属性列去掉。
-
自然连接的含义:
- R 和 S 具有相同的属性组 B:
一般的连接操作从行的角度进行运算。 自然连接需要取消重复列,因此是同时从行和列的角度进行运算。
外连接
悬浮元组(Dangling tuple)
在两个关系 R 和 S 进行自然连接时,关系 R 中某些元组可能在 S 中不存在公共属性上值相等的元组,从而导致这些元组在操作时被舍弃。这些被舍弃的元组称为悬浮元组。 如上面例子中的 (a2, b4, 12)
外连接(Outer Join)
如果在结果关系中保留悬浮元组,并在其他属性上填充空值(Null),这种操作外连接。
-
左外连接 (LEFT OUTER JOIN 或 LEFT JOIN)
- 只保留左边关系 R 中的悬浮元组。
-
右外连接 (RIGHT OUTER JOIN 或 RIGHT JOIN)
- 只保留右边关系 S 中的悬浮元组。
-

-

8. 除运算(Division)
给定关系 和 ,其中 X、Y、Z 为属性组。
-
R 中的 Y 与 S 中的 Y 可以有不同的属性名,但必须出自相同的域集。
-
R 与 S 的除运算得到一个新的关系 ,P 是 R 中满足下列条件的元组在 X 属性列上的投影:
- 元组在 X 上的分量值 x 的象集 包含 S 在 Y 上投影的集合,记作: 其中, 是 x 在 R 中的象集,且 。
-

-






