1、第2章 关系数据库基本理论,逯燕玲 戴红 李志明 主编,2019年8月23日星期五,2,第2章 关系数据库基本理论,2.1 关系模型的概念 2.2 关系代数 2.3 关系模型的规范化,2019年8月23日星期五,3,2.1 关系模型的概念,2.1.1 关系的数学定义 定义1:域(Domain)是一组具有相同数据类型的值的集合。 定义2:任意给定一组域D1,D2,Dn的笛卡尔积(Cartesian Product)为:D1D2Dn=(d1, d2, , dn)diDj,j1, 2, , n其中每一个元素(d1,d2,dn)叫作n元组(n-tuple),或简称为元组(Tuple)。元素中的每一个值
2、di叫作分量(Component)。若Di(i1, 2, , n)为有限集,其基数(Cardinal number)为mi(i1, 2, , n),则D1D2Dn的基数为:m=m1m2mn。,【例2-1】设D1为导师(SUPERVISOR)集合,D2为专业(SPECIALITY)集合,D3为研究生(POSTGRADUATE)集合,且D1=张清玫, 刘逸,D2=计算机应用, 信息管理,D3=李勇, 刘晨, 王敏,则D1、D2、D3的笛卡儿积D1D2D3的基数为223=12,即D1D2D3一共有12个元组,它们可列成一张二维表,如表2.1所示。,2019年8月23日星期五,5,定义3:D1D2Dn
3、的任意一个子集叫做在域D1、D2、Dn上的关系(Relation),用R(D1, D2, , Dn)表示。这里R表示关系的名字,n是关系的目或度(Degree)。 【例2-2】计算机应用专业关系是例2-1中D1D2D3的一个子集,如表2.2所示。,2019年8月23日星期五,6,基本关系具有6条性质, 列是同质的(Homogeneous),即每一列中的分量是同一类型的数据,来自同一个域。 不同的列可出自同一个域,称其中的每一列为一个属性,不同的属性要给予不同的属性名。 列的顺序是可以任意交换的。 任意两个元组不能完全相同。但在大多数实际关系数据库产品中,如ORACLE、FoxPro等,如果用户
4、没有定义有关的约束条件,都允许关系表中存在两个完全相同的元组。 行的顺序也是可以任意交换的。 行列的交集称为分量,每个分量必须取原子值,即每个分量都必须是不可分的数据项。,2019年8月23日星期五,7,关系模式是对关系的描述,定义4 关系的描述称为关系模式(Relation Schema),可以形式化地表示为: R(U, D, dom, F)其中,R为关系名,U为组成该关系的属性名集合,D为属性组U中属性所来自的域,dom为属性向域的映象集合,F为属性间数据的依赖关系集合。,2019年8月23日星期五,8,2.1.2 关系操作,选择(Select) 投影(Project) 连接(Join)
5、除(Divide) 并(Union) 交(Intersection) 差(Difference)等查询操作 增加(Insert) 删除(Delete) 修改(Update),2019年8月23日星期五,9,2.1.3 关系的完整性,实体完整性(entity integrity):若属性A是基本关系R的主属性,则属性A不能取空值。 参照完整性(referential integrity):若属性(或属性组)F是基本关系R的外码,与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为空值(F的每个属性值均为空值),或者等于S中某个元组的主码值。,201
6、9年8月23日星期五,10,定义5 设F是基本关系R的一个或一组属性,但不是关系R的码,如果F与基本关系S的主码Ks相对应,则称F是基本关系R的外码(Foreign Key),并称基本关系R为参照关系(Referencing Relation),基本关系S为被参照关系(Referenced Relation)或目标关系(Target relation)。关系R和S不一定是不同的关系。 【例2-3】学生(学号, 姓名, 性别, 专业号, 年龄)专业(专业号,专业名) “学生”的“专业号”必须参照“专业”的“专业号”。,2019年8月23日星期五,11,2.1.3 关系的完整性(续),实体完整性(
7、entity integrity) 参照完整性(referential integrity 用户定义的完整性(user-defined integrity):用户针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求。 实体完整性和参照性是关系模型必须满足的完整性约束条件,应该由关系系统自动支持。用户定义的完整性是应用领域需要遵循的约束条件,体现了具体领域中的语义约束。,2019年8月23日星期五,12,2.2 关系代数,2.2.1 传统的集合运算 并(union) :RS=t|tRtS 差(Difference): R-S=t|tRtS 交(Intersection
8、): RS=t|tRtS 广义笛卡尔积(Extended Cartesian Product): RS=|trRtsS,2019年8月23日星期五,13,2.2.2 专门的关系运算,选择(select)是在关系R中选择满足给定条件的诸元组:F(R) = t | tRF(t) = 真 其中,F表示选择条件,是一个逻辑表达式,取逻辑值“真”或“假”。逻辑表达式F的基本形式为:X1 Y1。表示比较运算符,可以是、或。X1、Y1等是属性名或常量或简单函数。 【例2-4】查询信息管理专业(专业号021)全体学生:Sdept =021(Student) 或 4=021(Student),2019年8月23
9、日星期五,14,投影(project)是从R中选择出若干属性列组成新的关系: A(R) = tA | tR 其中,A为R中的属性列。 例如查询学生关系Student在学生姓名和年龄两个属性上的投影: Sname,Sage(Student) 或 2,5(Student),2019年8月23日星期五,15,连接(join)是从两个关系的笛卡尔积中选取属性间满足一定条件的元组:R S | trRtsStrAtsB 其中,A和B分别为R和S上度数相等且可比的属性组。是比较运算符。连接运算从R和S的笛卡尔积RS中选取(R关系)在A属性组上的值与(S关系)在B属性组上值满足比较关系的元组。 连接运算中有两
10、种最为重要也最为常用的连接,一种是等值连接(Equi-Join),另一种是自然连接(Natural Join)。,2019年8月23日星期五,16,【例2-5】设关系R和关系S如下表:关系R 关系S,2019年8月23日星期五,17,R与S自然连接的结果为:,2019年8月23日星期五,18,除(Division)运算得到一个新的关系P(X),P是R中满足下列条件的元组在X属性列上的投影:元组在X上分量值x的象集Yx包含S在Y上投影的集合。记作: RS = trX|tRYxY(S) 其中Yx为x在R中的象集,x=trX 【例2-5】中的关系R和S,RS的结果为:,2019年8月23日星期五,1
11、9,查询实例,【例2-6】对学生-课程关系数据库,查询选修了0212号课程的学生学号: Sno(2=0212(SC) 【例2-7】查询至少选修了0171号课程和0531号课程的学生学号:1,2(SC) 1(1=01711=0531 (Course) ) 【例2-8】查询至少选修了一门其直接先行课为0212号课程的学生姓名:Sno,Sname(Student 1(4=0212(Course)SC) 【例2-9】查询选修了全部课程的学生学号和姓名:Sno,Sname (Student (1,2 (SC)1(Course) ) ),2019年8月23日星期五,20,2.3 关系模型的规范化,规范化
12、按关系模式所具有的数据依赖性质对关系模式的分类。也就是关系的规范化程度。 满足不同程度要求的为不同范式。 规范化过程 把一个低一级范式的关系模式通过模式分解转化为若干个高一级的关系模式的过程。,2019年8月23日星期五,21,2.3.1 函数依赖,定义6:设R(U)是属性集U上的关系模式。X和Y是U的子集。若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等。则称X函数确定Y或Y函数依赖于X,记作XY。 【例2-10】在学生-课程数据库中,snosname,cnocname,(sno,cno)grade。,2019年8月23日星期五,22,定义
13、7:在R(U)中,如果XY,并且对于X的任何一个真子集X,X都不能函数确定 Y,则称Y对X完全函数依赖,记作:X Y。 定义8:在R(U)中,如果XY (Y 不是X的真子集,且Y不能函数确定 X) ,YZ,则称Z对X传递函数依赖。,f,2019年8月23日星期五,23,传递函数依赖:若属性1 属性2 属性3,则属3传递函数依赖于属性1。,部分函数依赖:若(属性1,属性2)为关键字,属性1 属性3,则属性3部分函数依赖于属性1。,2019年8月23日星期五,24,定义9:设K为RU,F中的属性或属性组合,若KU,则K为R的候选码(Candidate key)。若候选码多于一个,则选定其中的一个为
14、主码(Primary key)。 定义10:关系模式R中属性或属性组X并非R的码,但X是另一个关系模式的码,则称X是R的外部码(Foreign key)也称外码。,f,2019年8月23日星期五,25,2.3.2 范式 1、第一范式(1NF) :关系的每个分量必须是不可再分的数据项。记作R1NF。(每个属性必须是原子的)2、说明:, 属性不可再分(不允许出现嵌套的属性定义), 属性下的值不可再分(不允许出现多个值), 这是对关系的最起码的要求,但远远不够。(满足1NF的关系称为规范关系),【例2-11】职工情况表,【例2-12】借书表,这两个表 都可变为 规范关系,2019年8月23日星期五,
15、26,两个表变为规范关系:,2019年8月23日星期五,27,第二范式(2NF),定义:若 R1NF,且每一非主属性都完全函数依赖于R的码,则称R是第二范式,记作R 2NF。,【例2-13】属于1NF但不属于2NF的例子: 关系模式W(工号,日期,姓名,工种,定额,超额,车间,车间主任) 关系模式S_L_C(S#,SD,SL,C#,G),2019年8月23日星期五,28,第三范式(3NF),定义:若关系模式 R1NF,并且R中不存在码X、属性组Y和非主属性Z(Z Y)使得XY( Y X),Y Z成立,则称 R3NF。,【例2-14】关系模式 R(S,T,J),每个教师只教一门课,每门课有若干教
16、师,学生选定某门课就对应固定的教师。,2019年8月23日星期五,29,【例2-15】将学生简历及选课等数据设计成一个关系模式STUDENT,其表示为:STUDENT(SNO, SNAME, AGE, SEX, CLASS, DEPTNO, DEPTNAME, CNO, CNAME, SCORE,CREDIT) 假设该关系模式满足下列函数依赖:FSNOSNAME, SNOAGE, SNOSEX, SNOCLASS, CLASSDEPTNO, DEPTNODEPTNAME, CNOCNAME, SNO.CNOSCORE, CNOCREDIT 该关系模式的每一属性对应的域为简单域,非主属性对码存在
17、部分函数依赖 ,所以STUDENT关系模式仅为第一范式。,2019年8月23日星期五,30,将STUDENT中对码完全依赖的属性和部分函数依赖的属性分别组成关系。即将STUDENT关系模式分解成三个关系模式: STUDENT1(SNO, SNAME, AGE, SEX, CLASS, DEPTNO, DEPTNAME)COURSE(CNO, CNAME, CREDIT)SC(SNO, CNO, SCORE) 在分解后的每个关系模式中,非主属性对码是完全函数依赖,所以上述三个关系模式均为2NF。 关系模式STUDENT1属性间还存在传递依赖,它不是3NF。,2019年8月23日星期五,31,将S
18、TUDENT1分解为下列模式: STUDENT2(SNO, SNAME, AGE, SEX, CLASS)CLASS(CLASS, DEPTNO)DEPARTMENT(DEPTNO,DEPTNAME) 连同 COURSE(CNO, CNAME, CREDIT)SC(SNO, CNO, SCORE) 关系模式属于3NF。,2019年8月23日星期五,32,2.3.3 E-R模型向关系数据库转换,一个1:1联系转换为一个独立的关系模式,也可以与任意一端的关系模式合并 一个1:n联系转换为一个独立的关系模式,也可以与n端的关系模式合并 一个m:n转换为一个关系模式,各实体的码和联系本身的属性均为关系
19、的属性,各实体码的组合为关系的码。 多元联系转换为一个关系模式,各实体的码和联系本身的属性均为关系的属性,各实体码的组合为关系的码。,2019年8月23日星期五,33,【例2-16】将学生-课程E-R模型转换为关系模式,在此E-R模型中描述了四个实体型,每个实体型转换为一个关系模式;“选修”联系是两个实体间的多对多联系,转换为一个关系模式; “讲授”联系是教师、课程和参考书三个实体间的一对多联系,由于该联系有自己的属性,故应该将其转换为一个独立的关系模式。,2019年8月23日星期五,34,学生-课程关系模式,学生(学号, 姓名, 性别, 年龄, 专业号, 联系电话, , 家庭地址) 课程(课
20、程号, 课程名, 学时, 学分, 直接先行课) 教师(教师号, 姓名, 性别, 出生日期, , 职称) 参考书(书号, 书名, 作者, 出版社, 出版年月) 选修(学号, 课程号, 成绩) 讲授(教师号, 课程号, 书号, 教授时间, 讲授地点),2019年8月23日星期五,35,数据库规范化设计,1.关系模式的操作异常例 设“学生选课”关系模式 R(sno,sname,sex,cno,cname,score) 存在问题:数据冗余、修改异常、插入异常、删除异常。 2.关系模式的规范化将所有属性组成的关系模式称为泛关系模式,将关系r称为泛关系。一般R(U)和r必须用R1,Rk代替,则称为数据库模
21、式,其中每一个关系模式Ri实例的集合称为数据库实例(简称数据库)。,【例2-17】假设车间考核职工完成生产定额的关系模式如下:W(工号,日期,姓名,工种,定额,超额,车间,车间主任),比如设某工号某年月超额完成定额的20%,其记录的内容为: (1001,98年11月,张三,车工,180,20%,金工车间,李四),该关系的主键为?,工号 日期,该关系模式存在以下四个严重问题:,对同一个人来说,其姓名、工种、车间、车间主任等多次重复, 1001,98年08月,张三,车工,金工车间,李四 1001,98年09月,张三,车工,金工车间,李四 1001,98年10月,张三,车工,金工车间,李四 1001
22、,98年11月,张三,车工,金工车间,李四 ,(1)数据冗余大,2019年8月23日星期五,37,(2)插入异常,若新调来一个职工并将他分配到某个车间,根据上述关系模式,在对该职工统计工作之前,他的信息是装不进数据库中的。因为他的日期值是空值,而日期是主键的属性之一,不允许为空。,(1005,NULL,天然,车工,NULL,NULL,金工车间,李四),应该存储的信息无法存储,(3)删除异常,不该删除的信息被删除,若想删除某人的所有定额完成情况,则该职工的其他信息也都被删除。,比如在98年底要删除97年以前的所有定额完成信息,则98年由于种种原因未参加现实工作的职工的所有信息全部被删除。,201
23、9年8月23日星期五,38,(4)修改困难,容易造成数据的不一致性,若某车间换了主任,则该车间所有职工的上述记录都要修改;又如某人换了车间,则其工种、车间、车间主任等信息都要修改。,修改工作量大; 即使漏改一处都会造成数据的不一致性;,(也称更新异常),上例充分说明对关系模式若随意设计,其后果是严重的。本章将要讨论产生上述问题的原因以及解决办法,即如何改造一个不好的关系模式。这就是规范化理论要解决的主要问题。,2019年8月23日星期五,39,例:车间考核职工完成生产定额的关系模式: W(工号,日期,姓名,工种,定额,超额,车间,车间主任),主属性,非主属性,显然W 1NF,但第一节中我们已讨
24、论知它有 四个严重问题,工号函数决定非主属性姓名、工种、车间、车间主任。因此,关键字(工号,日期)部分函数决定这些属性。这显然是产生冗余的一个主要原因。,3、仅属于1NF的关系模式可能会产生的问题:,数据冗余,插入异常,删除异常,修改困难,因此仅是第一范式的关系模式完全不能满足需要。分析出现问题的原因:,2019年8月23日星期五,40,函数依赖:(S#,C#) G,S# SL (S#,C#) SD (S#,C#) SL,关键字:(S#,C#),S# SD,SD SL,,G,SD,SL,S#,C#,关键字,完全,部分,对关系模式S_L_C,同样存在数据冗余大、插入异常、 删除异常、修改困难等问
25、题。(产生问题的原因同W),2019年8月23日星期五,41,解决办法:用投影分解 消除非主属性对关键字的部分函数依赖转换为2NF,S_L,SC,2NF,2NF,2019年8月23日星期五,42,分解之后,与S_L_C相比: 数据冗余减小(原来伴随学生所学的每门课都要存储一遍SD、SL的值); 没选课的学生信息可以存储; 删除选课记录不会误删学生其他信息; 冗余数据的减少使得修改变得容易些。,S_L还有问题吗?,1NF的上述四个问题得到了部分解决,分解前 S_L_C(S#,SD,SL,C#,G),分解后 SC(S#,C#,G)S_L(S#,SD,SL),2019年8月23日星期五,43,4、仅
26、属于2NF的关系模式可能会产生的问题,(4)修改困难,(2)插入异常,(3)删除异常,(1)数据冗余,S_L(S#,SD,SL),数据冗余仍然较大:SL的值重复严重,若一个系刚成立但尚无学生,该系名称等无法存储,若一个系的学生全部毕业,删除全部学生数据的同时把该系的数据(如系名等)也都删除了,数据冗余大势必造成修改困难 (这可以说是个必然联系),可能的原因: 存在传递函数依赖S#SL,2019年8月23日星期五,44,例:关系模式 R(S,T,J),问题,J 重复,产生冗余, 带来可能的不一致性等问题,函数依赖:(S,J) T; (S,T) J;T J 候选关键字:(S,J);(S,T) R中
27、无非主属性,显然R3NF。,S T J,可能的原因: R中存在部分函数依赖 (S,T) J。,(S,T),学生1 教师1 课程1 学生K 教师1 课程1 学生L 教师2 课程1 学生M 教师2 课程1 学生1 教师3 课程2 学生K 教师3 课程2,2019年8月23日星期五,45,5、仅属于BCNF的关系模式可能会产生的问题,以前面讨论过的关系模式 TEACH(C,T,B)为例,物理 汪洋 普通物理学 物理 汪洋 光学原理 物理 汪洋 物理习题集 物理 大海 普通物理学 物理 大海 光学原理 物理 大海 物理习题集 数学 大海 数学分析 数学 大海 微分方程 数学 大海 高等代数 数学 白云 数学分析 数学 白云 微分方程 数学 白云 高等代数 ,课程C 教员T 参考书B,TEACH的关键字是 (C,T,B),即全键。 因此 TEACHBCNF,问题:冗余大,增、删不便,原因:存在多值依赖,2019年8月23日星期五,46,范式规范化过程,1NF,2NF,3NF,BCNF,4NF,消除决定因素非码的非平凡函数依赖,