要求、目标:
理解关系模型的运算理论,了解关系演算和查询优化,熟练掌握关系代数运算,掌握关系代数表达式的构造方法。
一、简介
1.关系模型的三个组成部分:数据结构、数据操纵和数据完整性规则。
2.数据结构:数据库中全部数据及其相互联系都被组织成“关系”(二维表格)的形式。关系模型基本的数据结构是关系。
3.数据操纵:关系模型提供一组完备的高级关系运算,以支持对数据库的各种操作。关系运算分成关系代数和关系演算两类。
4.数据完整性规则:数据库中数据必须满足实体完整性、参照完整性和用户定义的完整性等三类完整性规则。
5.关系数据库的数据操纵语言(DML)的语句分成查询语句和更新语句两大类。查询语句用于描述用户的各种检索要求;更新语句用于描述插入、删除、修改等操作。前者是基础。
6.关系查询语言分两类:关系代数语言(查询操作以集合操作为基础)和关系演算语言(查询操作以谓词演算为基础)
二、关系代数
1.关系代数中的操作可以分为两类:
1)传统的集合操作:并、差、交、笛卡儿积(乘法)、笛卡儿积的逆运算(除法)
2)扩充的关系操作:投影、选择、连接等。
2.关系代数的五个基本操作:并、差、笛卡儿积、投影和选择。
3.并:设关系R和S具有相同的关系模式,R和S的并是由属于R或属于S的元组构成的集合,记为R∪S。
4.差:设关系R和S具有相同的关系模式,R和S的差是由属于R但不属于S的元组构成的集合,记为R-S。
5.笛卡儿积:设关系R和S的元数分别为r和s,R和S的笛卡儿积是一个(r+s)元的元组集合,每个元组的前r个分量(属性值)来自R的一个元组,后s个分量来自S的一个元组。若R有m个元组,S有n个元组,则R×S有m×n个元组。
6.投影:对一个关系进行垂直分割,消去某些列,并重新安排列的顺序。例:π3,1(R) 下标也可以用属性名表示。
7.选择:对关系做水平分割,即选取符合条件的元组。表示为:σF(R)从R中挑选满足公式F为真的元组所构成的集合。
F中有两种成分:
1)运算对象:常数(用引号括起来)、元组分量(属性名或列的序号)
2)运算符:算术比较运算符(<、≤、>、≥、=、≠、也称为θ符)、逻辑运算符(∧、∨、¬)
8.交:设关系R和S具有相同的关系模式,R和S的交是由属于R又属于S的元组构成的集合,记为R∩S。R∩S=R-(R-S)或R∩S=S-(S-R)
9.连接:从关系R和S的笛卡儿积中选取属性值满足某一θ操作的元组,记为R∞S i和j分别是关系R和S中的第i个和第j个属性名或序号。
连接是由笛卡儿积和选择操作组合而成。
如果θ为“=”,该连接操作称为“等值连接”。
10.自然连接:公共属性只出现一次的等值(公共属性值全部相等)连接。
一般自然连接使用在R和S有公共属性的情况中。如果两个关系没有公共属性,那么其自然连接就转化为笛卡儿积操作。
11.除法:设关系R(X,Y)和关系S(Y,Z),则R÷S定义为:
R(X,Y)÷S(Y,Z)=∏X(R)-∏X((∏X(R)×∏Y(S))-R)
12.关系代数表达式:由五个基本操作经过有限次复合的式子称为代数表达式。这种表达式的运算结果仍是一个关系。可以用关系代数表达式表示各种数据查询操作。
例:教学数据库中的四个关系如下:
教师关系T(T#,TNAME,TITLE)
课程关系C(C#,CNAME,T#)
学生关系S(S#,SNAME,AGE,SEX)
选课关系SC(S#,C#,SCORE)
使用关系代数表达式表达下列每个查询语句。
1)检索学习课程号为C2课程的学生学号与成绩。
πS#,SCORE(σC#=‘C2‘ (SC))或π1,3(σ2=‘C2‘ (SC))
2)检索学习课程号为C2课程的学生学号和姓名。
πS#,SNAME(σC#=‘C2‘ (S∞SC))
3)检索至少选修LIU老师所授课程中一门课程的学生学号与姓名。
πS#,SNAME(σTNAME=‘LIU‘ (S∞SC∞C∞T))
4)检索选修课程号为C2或C4课程的学生学号。
πS#(σC#=‘C2‘ ∨ C#=‘C4‘ (SC))
5)检索至少选修课程号为C2和C4课程的学生学号。
π1(σ1=4 ∧ 2=‘C2‘ ∧ 5=‘C4‘ (SC×SC))
6)检索不学C2课程的学生姓名与年龄。
πSNAME,AGE(S)-πSNAME,AGE(σC#=‘C2‘ (S×SC))
7)检索学习全部课程的学生姓名。
πSNAME(S∞(πS#,C#(SC)÷πC#(C)))
8)检索所学课程包含学号为S3学生所学课程的学生学号。
πS#,C#(SC)÷πC#(σS#=‘S3‘ (SC))
总结:查询语句的关系代数表达式的一般形式是:
π…(σ…(R×S))或π…(σ…(R∞S))
即首先把查询涉及到的关系取来,执行笛卡儿积或自然连接操作得到一张大的表格,然后对大表格执行水平分割(选择操作)和垂直分割(投影操作)。
但这种形式不适用于否定或全部值的查询。这时要用差或除法操作。
13.外连接:如果R和S做自然连接时,把原该舍弃的元组也保留在新关系中,同时在这些元组新增加的属性上填上空值(Null),这种操作称为“外连接”操作。
14.左外连接:如果R和S做自然连接时,只把R中原该舍弃的元组放到新关系中,那么这种操作称为“左外连接”操作。
15.右外连接:如果R和S做自然连接时,只把S中原该舍弃的元组放到新关系中,那么这种操作称为“右外连接”操作。
16.外部并:两个关系R和S做并操作时,如果它们的关系模式不同,构成的新关系的属性由R和S的所有属性组成(公共属性只取一次),新关系的元组由属于R或属于S的元组构成,同时元组在新增加的属性上填上空值,那么这种操作称为“外部并”操作。
三、关系演算
关系演算又可分为元组关系演算和域关系演算,前者以元组为变量,后者以属性(域)为变量。
四、关系代数表达式的优化
1.目的:提高系统效率。
2.三条启发式规则:
1)尽可能早地执行选择操作;
2)尽可能早地执行投影操作;
3)避免直接做笛卡儿积,把笛卡儿积操作之前和之后的一连串选择和投影合并起来一起做。