关系模型
? 数据结构,关系
?关系模型三要素,数据结构、数据操作、完整性规则
?数据结构, 关系
学号 姓名 年龄 性别
2001001 张三 20 男
2001002 王五 19 男
2001003 李英 19 女
学生登记表
?关系:规范化的二维表
?关系的目(度、关系的元数),单元关系、
二元关系、关系的基数
?属性、属性名、元组
注,关系规范化限制:
?关系中每个属性值必不可分
?关系中不能出现重复元组
?关系中不考虑元组和属性间的顺序
?每列中的属性值的数据类型相同
?不同列属性值的数据类型可同
?候选键:
?主键 (主码 ):
?外键:
一个属性组的值唯一标识一个元组,该 属性组 称为候选键
Orders(orderno,month,cid,aid,pid,qty,dollars)
sc(sno,cno,cgrade) sc(id,sno,cno,cgrade)
Customers(id,cname,city,discnt)
?关系模式:对关系的描述
关系名(属性名 1,属性名 2,… )
?三类完整性规则
a,实体完整性:
b,参照完整性:
c,用户定义完整性:
主键不能为空
在外键中不能引用在其他表中并
不存在的主键值
cid cname City Discnt
C001 Sohu Beijing 10
C002 ACME Duluth 8
C003 UT Tianjin 9
orderno month cid aid pid qty dollars
O001 July C001 A001 P001 100 120.00
O002 May C004 A002 P002 890 340.00
customers
orders
R(U,D,dom,F)
?关系操作:集合操作方式
? 关系运算,关系代数语言:以集合运算为基础关系演算语言:以谓词演算为基础
?关系代数,它的运算对象和结果都为关系
运算名称 运算符 举例( R,S为两个关系)




并 ∪ R ∪ S
差 - R- S
笛卡尔积 × R× S
选择 σ ?F( R)
投影 ∏ ПA( R)




交 ∩ R∩ S
连接 R S
除 ÷ R÷ S
?并,R ∪ S
结果由属于 R和 S的元组组成,仍为 n元关系
?差,R- S
结果由属于 R但不属于 S的元组组成,仍为 n元关系
?笛卡尔积,R × S
?交,R∩ S
结果由既属于 R又属于 S的元组组成,仍为 n元关系
相当于 R-( R- S)
结果为 n+ m元关系,由 k1 × k2个元组组成
例 1:求关系 R和 S的并、交、差、笛卡尔积的值
R SA B C
a b c
d a f
c a d
D E F
d a f
b g a
例 2:求笛卡尔积的值
结论:关系是笛卡尔积的有限子集
D1=男人集合 ={王军,李平,张迎 } D2=女人集合 ={丁小,吴方 }
D3=孩子集合 ={王一,李一,李二 }
D1 × D2 × D3= {王军,丁小,王一 } {王军,丁小,李
一 } {王军,丁小,李二 }{王军,吴方,王一}{王军,天方,
李一}{王军,吴方,李二}{李平,丁小,王一}{李平,丁
小,李一}{李平,丁小,李二}{李平,吴方,王一} { 李平,
吴方,李一}{李平,吴方,李二} {张迎,丁小,王一}{张
迎,丁小,李一}{张迎,丁小,李二}{张迎,吴方,王一}
{张迎,吴方,李一}{张迎,吴方,李二}
[返回]
?选择,?F( R)
F形如,riθc(其中为=,≠、>、<,≤,≥或 ∧,
∨,(,┐),F的取值为真或假
结果为关系 R中满足条件 F的元组
[ 实例 ]
1,查询年龄小于 20的学生
2,查询所有男生的情况
Sno(学号 ) Sname(姓名 ) Ssex(性别 ) Sage(年龄 )
03001 刘黎 男 19
03002 张立 男 19
03003 王丽 女 18
Sno(学号 ) Sname(姓名 ) Ssex(性别 ) Sage(年龄 )
03001 刘黎 男 19
03002 张立 男 19
03004 周一 男 20
?投影,ПA( R)
选取关系的某些列做垂直投影,并可重新安
排列的顺序。
[ 实例 ]
1,在 S表的 Sname和 Sage列上作投影
2,查询选课学生的学号
Sname(姓名 ) Sage(年龄 )
刘黎 19
张立 19
王丽 18
周一 20
Sno(学号 )
03001
03003
03004
注:在投影操作结果中产生的重复元组应取消
?连接,R SAθB
从关系 R和 S的笛卡尔积中选取属性间满
足一定条件的元组。
等价于,R S=
∏i1,i2,…im (σR.A1=S.B1 ∧ … ∧ R,Ak= S,Bk(R× S))AθB
[ 实例 ]
A<B1.求 R S
A B C D E F
a b c d a f
a b c b g a
?等值连接,R S
?自然连接,R S(特殊的等值连接 )
A= B
特殊性在于:
a) 在两个关系中比较的分量必须是两个相同
的属性或属性组
b) 在自然连接结果中如有相同属性,则把重
复列去掉,在等值连接中则不去掉
例 2:求 S SC
[ 实例 ]
Sno Sname Ssex Sage Cno Cgrade
03001 刘黎 男 19 C001 93
03001 刘黎 男 19 C002 80
03003 王丽 女 18 C003 85
03004 周一 男 20 C004 92
例 3:
R A B C S D E
a b c c a
d e f f b
g h I
R S、计算,R S、2< 1 R S2< 1∧ 1≥2
?除法,R÷ S
设两关系 R和 S的元数分别为 r和 s( r≥s> 0),
那么 R ÷ S是个( r- s) (至少为一元 )元的元
组的集合。
结果表示 S中的每个元组 u必在关系 R中
具体的计算过程:
a) T= ∏1,2,…,r - s( R)
b) W=( T× S)- R 即求出 TS中不在 R的元组
c) V= ∏1,2,…,r - s( W)
d) R÷ S= T- V
例 4
R S
A B C D C D
a b c d c d
a b e f e f
b c e f
e d c d
e d e f
a b d e
计算,R ÷ S
R ÷ S
A B
a b
e d
例 5
R S
A B C B C D
A1 B1 C2 B1 C2 D2
A2 B2 C4 B2 C1 D2
A1 B2 C3 B2 C3 D1
A3 B1 C1
A1 B2 C1
计算,R ÷ S
R ÷ S
A
A1
[ 实例 ]
例 6:查询至少选修了 C001和 C003课程的学生学号,
步骤:
?在课程表上选择满足课程号为 C001和 C003
元组,并在课程号上投影建立临时表 K
?除
临时表 K
Cno
C001
C003
Sno
03001
学生-选课( S- SC) 关系库:
S( 学生表)
Sno(学号 ) Sname(姓名 ) Ssex(性别 ) Sage(年龄 )
03001 刘黎 男 19
03002 张立 男 19
03003 王丽 女 18
03004 周一 男 20
C( 课程表)
Cno(课程号 ) Cname(课程名 ) Cteacher(教师 ) Ccredit(学分 )
C001 数据库 张三 4
C002 操作系统 刘亚 3
C003 数据结构 王一 4
C004 微机原理 陈永 3
SC( 选课表)
Sno(学号 ) Cno(课程号 ) Cgrade(成绩 )
03001 C001 93
03001 C002 80
03003 C003 85
03004 C004 92
关系代数运算的应用
例 1 设教学数据库有三个关系
S( S#,SNAME,AGE,SEX)
SC( S#,C#,GRADE)
C( C#,CNAME,TEACHER)
试分别用关系代数式表示下列查询语言:
1) 检索 LIU老师所授课程的课程号及课程名
2) 检索年龄大于 23岁的男学生学号和姓名
3) 检索学号为 S3的学生所学课程的课程名和任课老师名
4) 检索至少选修 LIU老师所授课程中一门课的女学生姓名
5) 检索学生 WANG不学的课程的课程号
6) 检索至少选修两门课程的学生学号
7) 检索全部学生都选修的课程号与课程名
8) 检索选修 LIU老师所授的课程的学生学号
例 2 设有一个 SPJ数据库,包括 S,P,J,SPJ四个关系模式
S( SNO,SNAME,STATUS,CITY)
P( PNO,PNAME,COLOR,WEITHT)
J( JNO,JNAME,CITY)
SPJ( SNO,PNO,JNO,QTY)
试用关系代数表达式表示下列查询语句
1) 检索供应工程 J1零件的供应商号码 SNO
2) 检索供应工程 J1零件 P1的供应商号码 SNO
3) 检索供应工程 J1零件为红色的供应商号码 SNO
4) 检索没有使用天津供应商生产的红色零件的工程号 JNO
5) 检索至少用了供应商 S1所供应的全部零件的工程号 JNO
例 3 计算机管理数据库有四个关系模式
Product(maker,model,type)
Laptop(model,speed,ram,hd,screen,price)
Printer(model,color,type,price)
试用关系代数表达式表示下列查询语句:
1) 什么型号的 PC速度至少为 150?
2) 检索厂商 B生产的所有产品(任一类型)的型号和价格
3) 检索哪个厂商生产的便携式电脑具有最少 1G字节的硬盘
4) 检索所有彩色激光打印机型号
5) 检索销售便携式电脑但不销售 PC的厂商
6) 检索在两个或两个以上 PC中出现的硬盘容量
7) 检索速度同且 RAM相同的成对的 PC型号
8) 检索至少生产两种不同计算机( PC或 Laptop) 且机器速
度至少为 133的厂商
在 S- SC- C关系中:
1) 检索学习课程号为 C4的学生学号与成绩
2) 检索学习课程号为 C1的学生学号与姓名
3) 检索选修课程名为 MATHS的学生学号与姓名
4) 检索选修课程号为 C2或 C3的学生学号
5) 检索至少选修课程号为 C2或 C3的学生学号
6) 检索不学 C2课程的学生姓名与年龄
7) 检索学习全部课程学生的姓名
8) 检索所学课程包含学生 S8所学课程的学生学号
作业:
1) 检索选修课程号为 C2或 C3的学生学号
2) 检索至少选修课程号为 C2或 C3的学生学号
3) 检索至少选修课程号为 C2和 C3的学生学号
4) 检索选修课程号为 C2或 C3的学生学号(两
课程不同时选)
5) 检索选修课程号只为 C2或 C3的学生学号
例:在关系 S- SC- C中,求选修了课程 C2的学生姓名
有三种等价的关系代数表达式
?П SN(? S.S#=SC.S#∧ SC.C#=‘C2’(S × SC))
?П SN(? SC.C#=‘C2’(S SC))
?П SN(S ? SC.C#=‘C2’(SC))
分析三种关系代数查询时所花费的时间:
假设:在库中有 1000条学生记录,10000选课记录,
其中选 C2的记录有 50个,设每秒写 20块,每块装
10个 S元组或 100个 SC元组,内存中可放五块 S元组
一块 SC元组。
关系代数的查询优化
?优化的策略:
1,选择运算应尽可能先做
2,在执行连接前对文件适当进行预处理。
3,把投影运算和选择运算同时进行
4,把投影运算同其前或后的双目运算结合起来,
没必要为了去掉某些字段而扫描关系
5,把某些选择同在它前面要执行的笛卡尔积结
合起来成为个连接运算
6,找出公共子表达式
注:预处理的方法:对文件排序和在连接属性上建索引。
?关系代数等价变换规则:
1) 交换律:
2) 结合律:
3) 选择串接定律:
4) 投影串接定律:
5) 选择和投影的交换律:
6) 选择与笛卡尔积的交换律:
7) 选择与并的交换:
8) 选择与差运算的交换:
9) 投影与笛卡尔积的交换:
10)投影与并的交换:
? F(E1 × E2)
?若 F中的属性都是 E1中的属性:
?若 F= F1 ∧ F2,且 F1只涉及 E1中属性,F2只涉及 E2中属性
?F1只涉及 E1中属性,F2涉及 E1和 E2两者的属性
σF1(σF2(E))≡ σF1∧ F2(E)
关系代数表达式的优化
输入:
输出:
一个关系表达式的语法树
计算该表达式的程序
方法,a) 利用规则 4
b) 对于每个选择,据规则 4- 8尽可能把它移到
树的叶端
c) 对于每个投影,据规则 3,9,10,5尽可能把它移
向树的叶端
d) 利用规则 3,4,5把选择和投影的串接变成单
个选择、单个投影或一个选择后跟一个投影
e) (× ∪ -)和它所有的 直接祖先 一组
?优化算法:
?优化步骤,
1) 关系代数表达式转为二叉树
2) 根据算法对二叉树进行优化
a) 结点代表操作符,叶子代表关系
b) 离根结点越远的操作符,越先运算
[ 实例 ]
转换成二叉树实例
例 1,∏C#( ∏C#( σC.S#=S1(SC))-∏C#(σSC.S#=S2(SC)) C)
例 2,∏C#((∏C#,S#(SC)÷ ∏S#(S)) C)
优化实例
例 1,∏SN(σS.S#=SC.S#∧ SC.C#=‘C2’(S× SC))
例 2:设一个学生的课程数据库有三个关系
S(Sno,Sname,Ssex,Sage,Sdept)
C(Cno,Cname,Ccredit)
SC(Sno,Cno,Grade)
请检索选修了 2号课程的学生姓名及其所在的系。
试写出该查询的关系代数表达式并进行优化。
优化实例
例 3 设教学数据库三个关系
S(S#,SNAME,AGE,SEX)
SC(S#,C#,GRADE)
C(C#,CNAME,TEACHER)
检索至少学习 MATHS课程的男学生学号和姓名。
试写出以上查询的关系代数表达式,并进行优化。
优化实例
例 4 选课关系库 S( S#,SN,SD,SA)
C( C#,CN,PC#) SC( S#,C#,G)
1) 求选修了 C1课程且成绩为 B以上的学生姓名(包括 B)。
2) 求不选修 C3课程的学生姓名
3) 求至少选修 S2所选课程的学生姓名
4) 求学生姓名,他所选的间接先行课都为 C1的学生姓名和
课程号。
5) 求课程名,此门课程被 S1,S2选,但不能同时选
关系演算
一、谓词演算
二、关系演算分类:元组关系演算、域关系演算
元组关系演算( ALPHA)
二、基本格式:
1) 工作空间:内存中的一块工作区域。
2) 表达式用于指示语句操作的对象(关系名
或属性名)
3) 操作条件是一个逻辑表达式。
说明:
三、检索操作:
一、基本对象:元组
检索操作
1,简单检索:
2,限定检索:
3,带排序的检索
4,带定额的检索
5,用元组变量的检索
6,用存在量词的检索
7,带多个关系的表达式的检索
8,用全称量词的检索
9,用两种量词的检索
10.用蕴函的检索
11.集函数
更新操作
1,修改
2,插入
3,删除
[实例 ]
域关系演算( QBE)
一、基本对象:元组变量的分量
二、检索操作
1,简单查询
2,条件查询
3,集函数查询
4,对查询结果排序
三、更新操作
1,修改
2,插入
3,删除
示例元素:
1,在示例元素下要
加下划线。
2,示例元素可能是
结果中的一个值,
也可能不是。
第二章 小结
?掌握关系数据库的一些基本概念
?熟练掌握关系代数的应用
?对关系代数表达式进行优化
用存在量词的检索
例:查询选修课程学分为 4的学生姓名和所学课程名。
思考:若没有量词,查询结果会怎样?
两种量词的检索
例:查询选修所有课程的学生学号和姓名。
例题
例 1 检索> 20的男学生的学号与姓名。
例 2 检索李勇同学所学课程的课程号
例 3 检索至少选了两门课的学生学号。