1.2.2 关系运算
在关系数据库中要访问所需要的数据,就要进行关系运算,关系运算分为两类:一类为传统的集合运算;另一类为专门的关系运算。
1.传统的集合运算
传统的集合运算包括并、差、交、广义笛卡儿积4种运算。传统的集合运算要求两个关系具有相同的结构,即两个关系都有n个属性,且相同的属性值取自同一个域。
(1)并运算:关系R与关系S的并是由属于R或属于S的元组组成的集合,生成的新关系记为R∪S。若存在完全相同的元组,则保留一个。
(2)交运算:关系R与关系S的交是由既属于R又属于S的元组组成的集合,生成的新关系记为R∩S。
(3)差运算:关系R与关系S的差是由属于R而不属于S的所有元组组成的集合,生成的新关系记为R-S。
(4)广义笛卡儿积运算:两个分别为m个属性和n个属性的关系R和S,其广义笛卡儿积的运算结果是一个(m+n)列的元组的集合,记为R×S。元组的前m列是关系R的一个元组,后n列是关系S的一个元组,如关系R有k1个元组,关系S有k2个元组,则R和S的广义笛卡儿积有k1×k2个元组。
图1-14、图1-15分别为具有3个属性列表的关系R、S。图1-16是关系R与关系S的并;图1-17是关系R与S的交;图1-18是关系R与S的差;图1-19是关系R与S的广义笛卡儿积。
图1-14 关系R
图1-15 关系S
图1-16 R与S的并
图1-17 R与S的交
图1-18 R与S的差
图1-19 R与S的广义笛卡儿积
2.专门的关系运算
专门的关系运算包括选择、投影、连接和除运算。
1)选择运算
选择运算是从关系R中选择满足条件的诸元组,记为σF(R),其中σ为选择运算符,F为选择条件。选择运算是从关系R中选择逻辑表达式F为真的元组,它是从行的角度进行的运算,其结果是原关系的子集。例如,学生-选课数据库,包括学生关系Student、课程关系Course和选修关系SC,如图1-20所示。查询性别为男的学生:σSsex=‘男’(Student),结果如图1-21所示。
图1-20 学生—课程数据库
图1-21 选择运算
2)投影运算
投影运算是从关系R选出若干个属性列组成新的关系,记为πA(R),其中,π为投影运算符,A为投影范围,投影运算是从列的角度进行的运算,相当于对关系R进行垂直分割。例如,查询学生姓名及所学专业:πSsname,Sdept(Student),结果如图1-22所示。
图1-22 投影运算
3)连接运算
连接运算是从两个关系的笛卡儿积中选取满足一定条件的元组,生成一个新关系的运算。事实上,关系的广义笛卡儿积运算就是最广义的连接运算,连接运算可以认为是在广义笛卡儿积运算的基础上再进行关系的选择、投影运算后得到的结果,因此,连接运算都需要一定的条件作为前提,这个前提称为连接条件。两个关系R和S的连接运算记为RF∞S。其中,F为连接条件,一般由运算符﹦、﹤、﹤﹦、﹥﹦、﹥、﹤﹥等组成关系表达式。连接的原则是从R和S的笛卡儿积R×S中选取关系R在A属性组上的值与关系S在B属性组上的值满足关系F的元组。
连接运算的种类有很多,包括内连接、左外连接、右外连接、全连接和自然连接等,其中最常用的是自然连接。例如,学生和选课的自然连接结果如图1-23所示。其中,要求学生与选课关系中具有相同的属性组Sno,自然连接的结果是把其属性值相等的元组连接起来,并去掉重复的属性列。
图1-23 自然连接
4)除运算
除运算是从关系的行与列的角度进行的运算。假设给定关系R(X,Y)和S(Y,Z),其中X、Y、Z为属性组。R除以S的结果只包含R中投影下的X属性组,且该属性组包含关系S在属性组Y上投影的集合,记为R÷S。例如,关系R、S,如图1-24(a)、(b)所示。求R÷S,如图1-24(c)所示。
图1-24 除运算
在关系R中投影的X可以取2个值{x1,x2},x1的属性组为{(y1),(y2)},x2的属性组为{(y3)};S在属性组Y上的投影为{(y1),(y2)}。显然,只有x1的属性组包含S在属性组Y上的投影,即R÷S={x1}。
以上介绍了8种关系运算,利用这些关系运算,可实现对关系数据库的查询操作,找出满足用户要求的数据。
3.关系的完整性规则
关系模型的完整性规则,是对关系的某种约束条件,以保证数据的正确性和有效性。关系模型中包括三类完整性约束:实体完整性(Entity Integrity)、参照完整性(Referential Integrity)和用户定义完整性(User-Defined Integrity)。其中,实体完整性和参照完整性是关系模型必须满足的完整性约束规则,由数据库系统自动支持。
1)实体完整性
实体完整性规则要求关系中的主键不能取空值(Null Value)。所谓空值,是指“无值输入”或“无意义”的值。
例如,在“学生”关系中,若指定“学号”为主键,则“学生”关系中所有元组的“学号”值不能取空,也不能输入不在“学号”域内的数据。
2)参照完整性
若关系R中的属性A为外键,即属性A为另一关系S的主键,则参照完整性规则规定,关系R中外键属性A的取值只能是两种情况之一,或者为空值或者为关系S的主键A中已有的值。
例如,在关系学生(学号,姓名,性别,出生年月,专业名称)、专业(专业名称、负责人,联系电话)中,由于“专业名称”在“学生”关系中为外键,其取值可能是空值,也可能取“专业”关系的主键“专业名称”中已存在的值,而不能取一个“专业”关系的主键“专业名称”中所没有的值。
3)用户定义完整性
用户定义完整性规则是指用户因特殊需要而对某个关系约定的特殊约束条件。例如,在关系“学生”中,若按照要求学生不能没有名字,则可以定义“学生”关系中的“姓名”不能取空值,这就是该关系的用户定义完整性规则。
4.关系模式的规范化
关系模式的规范化其目的是消除关系模式中数据的冗余,消除数据依赖中不合适的部分,解决数据操作中发生的异常现象。在关系数据库的规范化过程中将不同程度的规范化要求组合成不同的标准,这个标准称为范式(Normal Form,NF)。满足最低要求的范式为第一范式(1NF),在第一范式中满足进一步要求的为第二范式,其他依此类推。范式级别越高,满足条件越多,关系规范化程度越好。各种范式间的关系有:5NF⊂4NF⊂BCNF⊂3NF⊂2NF⊂1NF。一般,至少达到3NF或BCNF的关系模型才能继续其后续的设计和实现工作。