第二章关系数据库
2.1 关系数据结构及形式化定义
2.1.1 关系
域:一组具有相同数据类型的值的集合。
笛卡尔积:设A,B为集合,用A中元素为第一元素,B中元素为第二元素构成有序对,所有这样的有序对组成的集合叫做A与B的笛卡尔积,记作A x B。符号记为:A×B={(x,y)|x∈A∧y∈B}
每个(x,y)叫做元组,元组中每个值称为分量,一个域允许的不同取值的个数称为这个域基数。
例如给出三个域:
D1=导师集合={张清玫,刘逸}
D2=专业集合={计算机专业,信息专业}
D3=研究生集合={李勇,刘晨,王敏}
则D1、D2、D3的笛卡尔积为:
D1xD2xD3={(张清玫,计算机专业,李勇),(张清玫,计算机专业,刘晨),
(张清玫,计算机专业,王敏),(张清玫,信息专业,李勇),
(张清玫,信息专业,刘晨),(张清玫,信息专业,王敏),
(刘逸,计算机专业,李勇),(刘逸,计算机专业,刘晨),
(刘逸,计算机专业,王敏),(刘逸,信息专业,李勇),
(刘逸,信息专业,刘晨),(刘逸,信息专业,王敏),}
其中,(张清玫,计算机专业,李勇)、(张清玫,计算机专业,刘晨)都是元组。张清玫、计算机专业、李勇等都是分量。该笛卡尔积的基数为2 * 2 * 3 = 12,也就是说D1xD2xD3一共有12个元组。
关系:D1xD2x…xDn的子集叫做在域D1,D2,…,Dn上的关系,表示R(D1,D2,…,Dn),这里的R表示关系的名字,n是关系的目或度。
若关系中的某一属性组的值能唯一地标识一个元组,而其子集不能,则称该属性组为候选码,候选码的诸属性称为主属性。
若一个关系有多个候选码,则选定其中一个为主码。
2.2 关系操作
2.2.1 基本的关系操作
关系模型中常用的关系操作包括两部分:
-
查询(选择,投影,连接,除,并,差,交,笛卡尔积)
-
更新(插入,删除,修改)
2.2.2 关系数据语言
- 关系代数语言
- 关系演算语言
- 具有双重特点的语言SQL
2.3 关系的完整性
2.3.1 实体完整性
主码约束实现的
实体完整性规则:若属性(指一个或一组属性)A是基本关系R的主属性,则A不能取空值(null value)。所谓空值就是“不知道”或“不存在”或“无意义”的值。
2.3.2 参照完整性
外码约束实现的
设F是基本关系R的一个或一组属性,但不是关系R的码,Ks是基本关系S的主码。如果F与Ks相对应,则称F是R的外码(foreign key),并称基本关系R为参照关系,基本关系S为被参照关系或目标关系。关系 R与 S不一定是不同的关系。
参照完整性规则:若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码Ks相对应,则对于R中每个元组在F上的值必须:
- 或者取空值(F的每个属性值均为空值);
- 或者等于S中某个元组的主码值。
2.3.3 用户定义的完整性
不同的关系数据库系统根据其应用环境的不同,往往还需要一些特殊的约束条件。用户定义的完整性就是针对某一具体关系数据库的约束条件,它反应某一具体应用所涉及的数据必须满足的语义要求。
例如,某个属性必须取唯一值,某个属性取值范围可以定义在0~100之间等。
2.4 关系代数
关系代数的运算对象是关系,运算结果亦是关系。关系代数用到的运算符包括两类:集合运算符和专门的关系运算符,如图2.4所示。

2.4.1 传统的集合运算
传统的集合运算是二目运算。
R
A | B | C |
---|---|---|
a1 | b1 | c1 |
a1 | b2 | c2 |
a2 | b2 | c1 |
S
B | A | C |
---|---|---|
b2 | a1 | c2 |
b3 | a1 | c2 |
b2 | a2 | c1 |
并:R∪S={t|t∈R∨t∈S}
差:R-S={t|t∈R∧t∉S}
交:R∩S={t|t∈R∧t∈S}
笛卡尔积:R×S={(x,y)|x∈R∧y∈S}
R∪S
A | B | C |
---|---|---|
a1 | b1 | c1 |
a1 | b2 | c2 |
a2 | b2 | c1 |
a1 | b3 | c2 |
R∩S
A | B | C |
---|---|---|
a1 | b2 | c2 |
a2 | b2 | c1 |
R-S
A | B | C |
---|---|---|
a1 | b1 | c1 |
R×S
R.A | R.B | R.C | S.A | S.B | S.C |
---|---|---|---|---|---|
a1 | b1 | c1 | a1 | b2 | c2 |
a1 | b1 | c1 | a1 | b3 | c2 |
a1 | b1 | c1 | a2 | b2 | c1 |
a1 | b2 | c2 | a1 | b2 | c2 |
a1 | b2 | c2 | a1 | b3 | c2 |
a1 | b2 | c2 | a2 | b2 | c1 |
a2 | b2 | c1 | a1 | b2 | c2 |
a2 | b2 | c1 | a1 | b3 | c2 |
a2 | b2 | c1 | a2 | b2 | c1 |
2.4.2 专门的关系运算
Student
学号sno | 姓名sname | 性别ssex | 年龄sage | 所在系sdept |
---|---|---|---|---|
201215121 | 李勇 | 男 | 20 | CS |
201215122 | 刘晨 | 女 | 19 | CS |
201215123 | 王敏 | 女 | 18 | MA |
201215125 | 张立 | 男 | 19 | IS |
选择:在关系R中选择满足给定条件的诸元组。该运算是从行的角度进行的运算。
σsdept=‘IS‘(Student),即在student表中选择sdept为’IS’的元组,结果如下:
学号sno | 姓名sname | 性别ssex | 年龄sage | 所在系sdept |
---|---|---|---|---|
201215125 | 张立 | 男 | 19 | IS |
投影:从R中选择出若干属性列组成新的关系。该运算是从列的角度进行的运算。投影之后不仅取消了原关系中的某些列,而且还可能取消某些元组,因为取消了某些属性列后,就可能出现重复行,应取消这些重复行。
πsdept(Student),即在student表中投影出sdept列,结果如下:
所在系sdept |
---|
CS |
MA |
IS |
连接:从两个关系的笛卡尔积中选取属性间满足一定条件的元组。
- 等值连接:从关系R与S的笛卡尔积中选取A、B属性值相等的那些元组。
- 自然连接:是一种特殊的等值连接。一般的连接操作是从行的角度进行运算,但自然连接还需要取消重复列,所以是同时从行和列的角度进行的运算。
那些被舍弃的元组称为悬浮元组。如果把悬浮元组也保留在结果集中,而在其他属性上填空值(NULL),那么这种连接就叫做外连接;如果只保留左边关系R中的悬浮元组,就叫做左外连接;如果只保留右边关系S中的悬浮元组,记叫做右外连接。
除运算:设关系R除以S的结果为关系T,则T包含所有在R但不在S中的属性及其值,且T的元组与S的元组的所有组合都在R中。