关系什么是关系型数据库

什么是关系型数据库  时间:2021-05-01  阅读:()
34数据库原理及应用教程——基于Linux的MySQL和NoSQL应用第3章关系代数与关系数据库规范化关系数据模型的数据操作是以关系代数和关系演算为理论基础的.
了解关系模型的数学基础,对于理解关系模型、设计数据模式和实现应用很有帮助.
对于关系型数据库来说,设计任务就是构造哪些关系模式,每个关系模式包含哪些属性.
这是数据库逻辑结构设计问题.
在模式设计时,如何判断所设计的关系模式是"好"还是"不好"呢如果"不好",如何进行修改因此,数据库设计需要理论指导.
关系数据库规范化理论讨论如何判断一个关系模式是否是"好"的模式,如果不是,如何将其转换成"好"的关系模式,并保证得到的关系模式仍能表达原来的语义.
规范化理论虽然以关系模型为背景,但是它对于一般的数据库逻辑结构设计同样具有理论上的意义.
本章主要介绍关系数据库规范化理论.
首先由关系数据库逻辑设计可能出现的问题引入关系模式规范化的必要性,接着描述函数依赖的概念与关系模式的无损分解的方法,最后介绍关系模式的范式.
3.
1关系代数及其运算关系代数是一种抽象的查询语言,是关系数据操作语言的一种传统表达方式,它是用对关系的运算来表达查询的.
关系数据库的数据操作分为查询和更新两类.
查询语句用于各种检索操作,更新操作用于插入、删除和修改等操作.
关系操作的特点是集合操作方式,即操作的对象和结构都是集合.
关系模型中常用的关系操作包括:选择(select)、投影(project)、联接(join)、除(divide)、并(union)、交(intersection)、差(difference)等.
早期的关系操作通常用代数方式或逻辑方式来表示,关系查询语言根据其理论基础的不同分成如下两类.
①关系代数语言,查询操作是以集合操作为基础运算的DML.
②关系演算语言,查询操作是以谓词演算为基础运算的DML.
关系演算按谓词变元的基本对象是元组变量还是域变量,可以分为元组关系演算和域关系演算.
关系代数、元组关系演算和域关系演算在表达能力方面是完全等价的.
关系代数是建立在集合代数的基础上的,下面先介绍关系的数学定义.
3.
1.
1关系的数学定义1.
域(Domain)域是一组具有相同数据类型值的集合.
在关系模型中,域用来表示实体属性的取值范围,第3章关系代数与关系数据库规范化35通常用iD表示某个域.
例如,自然数、整数、实数、一个字符串、{男,女},大于10小于等于90的正整数等,都可以是域.
2.
笛卡儿积(CartesianProduct)给定一组域12,,,nDDD,这些域可以有相同的,则12,,,nDDD的笛卡儿积为:12121,2,,}nniiDDDddddDin其中,每个元素12,,,nddd称为n元组或简称元组,元素的每个值id称为一个分量.
若1,2,,iDin=()为有限集,其基数(指一个域中可以取值的个数)为1,2,,imin=(),则12nDDD***的基数为1niiMm==∏笛卡儿积可以表示成一个二维表,表中的每行对应一个元组,表中的每列对应一个域.
例如,给出3个域:姓名集合:D1={史丹妮,周冬元,李晓辉}性别集合:D2={男,女}专业集合:D3={会计,商务}123DDD**={(史丹妮,男,会计),(史丹妮,男,商务),(史丹妮,女,会计),(史丹妮,女,商务),(周冬元,男,会计),(周冬元,男,商务),(周冬元,女,会计),(周冬元,女,商务),(李晓辉,男,会计),(李晓辉,男,商务),(李晓辉,女,会计),(李晓辉,女,商务)}这12个元组可列成一张二维表,如表3-1所示.
3.
关系(Relation)12nDDD***的子集称为域12,,,nDDD上的关系,表示为12nRDDD.
这里,R表示关系的名字,n是关系属性的个数,称为目数或度数(Degree);当n=1时,称该关系为单目关系(Unaryrelation);当n=2时,称该关系为二目关系(Binaryrelation).
关系是笛卡儿积的有限子集,所以关系也是一个二维表.
例如,可以在表3-1的笛卡儿积结果中取出一个子集来构造一个学生关系.
由于一个学生只有一个专业和性别,所以笛卡儿积中的许多元组在实际中是无意义的,仅仅挑出有实际意义的元组构建一个关系,该关系名为Student,字段名取域名:姓名,性别和专业,见表3-2.
3.
1.
2关系代数概述关系代数是一种抽象的查询语言,是关系数据操纵语言的一种传统表达方式,它是用对关系的运算来表达查询的.
任何一种运算都是将一定的运算符作用于一定的运算对象上,得到预期的运算结果,所以运算对象、运算符、运算结果是运算的三大要素.
关系代数的运算对象是关系,运算结果亦为关系.
关系代数的运算符包括4类:集合运算符、专门的关系运算符、比较运算符和逻辑运算表3-1123DDD、、的笛卡儿积结果姓名性别专业史丹妮男会计史丹妮男商务史丹妮女会计史丹妮女商务周冬元男会计周冬元男商务周冬元女会计周冬元女商务李晓辉男会计李晓辉男商务李晓辉女会计李晓辉女商务表3-2Student关系姓名性别专业史丹妮女会计周冬元男商务李晓辉女商务36数据库原理及应用教程——基于Linux的MySQL和NoSQL应用符,如表3-3所示.
表3-3关系代数运算符运算符含义运算符含义集合运算符∪-∩*并差交广义笛卡儿积比较运算符>≥或≠;1X、1Y等是字段名、常量或简单函数,字段名也可以用它的序号(如1,2,…)代替;Φ表示逻辑运算符,它可以是(非)、∧(与)或∨(或);[]表示任选项,即其中的部分可要可不要;…表示上述格式可以重复.
选择运算实际上是从关系R中选取使逻辑表达式F为真的元组,是从行的角度进行的运算.
设有学生-课程数据库如表3-10所示,包括以下内容.
学生关系Student(Sno,Sname,Ssex,Sage,Sdept)课程关系Course(Cno,Cname)选修关系Score(Sno,Cno,Degree)说明:Sno表示学号,Sname表示姓名,Ssex表示性别,Sage表示年龄,Sdept表示所在系,Cno表示课程号,Cname表示课程名,Degree表示成绩.
第3章关系代数与关系数据库规范化39表3-10学生-课程关系数据库(a)StudentSnoSnameSsexSageSdept000101李晨男18信息系000102王博女19数学系010101刘思思女18信息系010102王国美女20物理系020101范伟男19数学系(b)Course(c)ScoreCnoCnameSnoCnoDegreeC1数学000101C190C2英语000101C287C3计算机000101C372C4制图010101C185010101C242020101C370其关系模式如下.
Student(Sno,Sname,Ssex,Sage,Sdept)Course(Cno,Cname)Score(Sno,Cno,Degree)【例3-5】查询数学系的学生的信息.
()Sdept''Studentσ=数学系或()5''Studentσ=数学系结果如表3-11所示.
表3-11查询数学系的学生的信息SnoSnameSsexSageSdept000102王博女19数学系020101范伟男19数学系【例3-6】查询年龄小于20岁的学生的信息.
()Sage20StudentσD的结果如表3-17所示,等值连接R.
B=S.
B的结果如表3-18所示,自然连接的结果如表3-19所示.
表3-15连接运算举例之关系R表3-16连接运算举例之关系SABCBDa1b45b512a1b37b43a2b28b320a2b110b215b19表3-17一般连接AR.
BCS.
BDa1b45b43a1b37b43a2b28b43a2b110b43a2b110b19表3-18等值连接表3-19自然连接AR.
BCS.
BDAR.
BCDa1b45b43a1b453a1b37b320a1b3720a2b28b215a2b2815a2b110b19a2b11094.
除运算(division)给定关系R(X,Y)和S(Y,Z),其中X、Y、Z为属性组.
R中的Y与S中的Y可以有不同的字段名,但必须出自相同的域集.
R与S的除运算得到一个新的关系P(X),P是R中满足下列条件的元组在X字段名上的投影:元组在X上分量值x的象集xY包含S在Y上投影的集合中.
Π[|rrYxRStXtRSY÷=∈∧其中,xY为X在R中的象集,[]rxtX=.
除操作同时从行和列角度进行运算,步骤如下.
①将被除关系的属性分为象集属性和结果属性:与除关系相同的属性属于象集属性,不相同的属性属于结果属性.
②对于被除关系相同的属性(象集属性)进行投影,得到除目标数据集.
③将被除关系分组,原则是,结果属性值一样的元组分为一组.
④逐一考察每个组,如果它的象集属性值中包括除目标数据集,则对应的结果属性值应属于该除法运算结果集.
象集的本质是一次选择运算和一次投影运算.
42数据库原理及应用教程——基于Linux的MySQL和NoSQL应用例如,关系模式R(X,Y),X和Y表示互为补集的两个属性集,对于遵循模式R的某个关系A,当t[X]=x时,x在A中的象集(ImagesSet)为xZtZtAtXx=∈=表示A中X分量等于x的元组集合在属性集Z上的投影,如表3-20所示.
表3-20关系AXYZ象集a1b1c2a1在A中的象集为{(b1,c2),(b2,c3),(b2,c1)}a2b3c7a3b4c6a1b2c3a4b6c6a2b2c3a1b2c1【例3-9】设关系R、S分别见表3-21(a)、(b),求R÷S的结果.
表3-21除运算示例表(a)关系R(b)关系S(c)R÷SABCBCDAa1b1c2b1c2d1a1a2b3c5b2c3d2a3b4c4b2c1d1a1b2c3a4b6c4a2b2c3a1b2c1关系除的运算过程如下.
①找出关系R和关系S中的相同属性,即属性B和C.
在关系S中对属性B和C投影,所得结果为{(b1,c2),(b2,c3),(b2,c1)}.
②被除关系R中与S中不相同的属性列是A,在关系R在属性A上做取消重复值的投影为{a1,a2,a3,a4}.
③求关系R中A属性对应的象集对应的象集B和C,根据关系R的数据,可以得到A属性各分量值的象集.
其中,a1的象集为{(b1,c2),(b2,c3),(b2,c1)},a2的象集为{(b3,c5),(b2,c3)},a3的象集为{(b4,c4)},a4的象集为{(b6,c4)}.
④判断包含关系,可以发现:a2、a3和a3的象集都不能包含关系S中的属性B和C的所有值,所以排除a2、a3和a3;而a1的象集包括关系S中属性B和C的所有值,所以R÷S的最终结果是{a1}.
在关系代数中,关系代数运算经过有限次复合后形成的表达式称为关系代数表达式.
对关系数据库中数据的查询操作可以写成一个关系代数表达式,或者说,写成一个关系代数表达式就表示已经完成了查询操作.
【例3-10】假设有两个关系:学生成绩、课程成绩,如表3-22所示,则学生成绩与课程成绩除运算的结果是满足一定课程成绩条件的学生的表,结果如表3-23所示.
第3章关系代数与关系数据库规范化43表3-22学生成绩与课程成绩的关系(a)学生成绩关系(b)课程成绩关系姓名性别系别课程名成绩课程名成绩李飞男计算机系数据结构优秀数据结构优秀张杨女数学系程序设计良好程序设计良好王一珊女文传系计算机基础合格计算机基础合格周文女文传系计算机基础合格苏醒男机电系计算机组成原理良好【例3-11】设学生-课程数据库中有3个关系Student、Course和SC:学生关系:Student(Sno,Sname,SSex,Sage,Sdept)课程关系:Course(Cno,Cname,Teacher)选修关系:SC(Sno,Cno,Degree)利用关系代数进行查询.
关系Student中,属性Sno、Sname、Ssex、sage和Sdept分别表示学号、姓名、性别、年龄和所在系,Sno为主键.
关系Course中,属性Cno、Cname、Teacher分别表示课程号、课程名、授课教师,Cno为主键.
关系SC中,属性Sno、Cno、Degree分别表示学号、课程号和成绩,属性组(Sno,Cno)为主键.
其关系实例如表3-24所示.
表3-24学生、课程与选修关系实例(a)关系Student实例(b)关系Course实例SnoSnameSsexSageSdeptCnoCname2016110101李飞男20计算机系C01数据结构2016080402张杨女21数学系C02数据库原理2016040152任新男22管理系C03操作系统2016130120苏醒男20机电系C04计算机组成原理C05软件工程(c)关系SC实例SnoCnoDegreeSnoCnoDegree2016110101C1802016080402C3672016080402C2872016040152C4952016040152C3682016130120C1872016130120C4902016080402C4902016080402C5922016110101C5642016080402C1652016130120C576(1)查询选修课程号为C3课程的学生学号和成绩.
CSno,Degreeno='C3'Π((SC))σ(2)查询学习课程号为C4课程的学生学号和姓名.
Cno='CSno,Sn4'ame((Studen)ΠtSC)σ(3)查询选修课程名为数据结构的学生学号和姓名.
表3-23学生学习成绩÷课程成绩姓名性别系别李飞男计算机系张杨女数学系王一珊女文传系周文女文传系44数据库原理及应用教程——基于Linux的MySQL和NoSQL应用Cname=''Sno,Sname((StudentSCCouΠrse))σ数据结构(4)查询选修课程号为C1或C3课程的学生学号.
Cno='C1'Cno='CSn3'o((SC))Πσ∨(5)查询不选修课程号为C2的学生的姓名和年龄.
CnamSno,SageSno,eSag='C'e2ΠΠ(Stu(Sdetudent)((Studentnt)SC))σ(6)查询年龄为18~23岁的女生的学号、姓名和年龄.
Sno,Sname,SageSage18Sage23Ssex''((Stu)Πdent)σ=≥≤∧∧女(7)查询至少选修课程号为C1与C5的学生的学号.
Sno1=43='C1'5'C5'((SCCΠS))σ=*∧∧(8)查询选修全部课程的学生的学号.
Sno,CnoCnoΠ(SC)(ΠCourse)÷(9)查询全部学生都选修的课程的课程号.
Sno,CnoSnoΠΠ(SC)(Student)÷(10)查询选修课程包含学生李飞所学课程的学生的姓名.
SnameSno,CnoCSnamnoe=''(Student((SC)((StudentΠΠΠSC)))σ÷李飞)(11)查询选修了操作系统或软件工程的学生学号和姓名.
Cname=''Cname='Sno,'Sname((CourseΠSC(Student))σ操作系统∨软件工程)3.
2关系演算关系运算除了用关系代数表示,还可以用谓词演算来表达关系的运算,称为关系演算(RelationalCalculus).
用关系代数表示关系的运算须标明关系运算的序列,因而以关系代数为基础的数据库语言是过程语言.
用关系演算表达关系的运算只要说明所要得到的结果,而不必标明运算的过程,因而以关系演算为基础的数据库语言是非过程语言.
目前,面向用户的关系数据库语言基本上都是以关系演算为基础的.
根据所用变量不同,关系演算可以分为元组关系演算和域关系演算.
3.
2.
1元组关系演算元组关系演算(TurpleRelationalCalculus)是以元组为变量,一般形式为{t[]P(t)}其中:t是元组变量,即用整个t作为查询对象,也可查询t中的某些属性.
如查询整个t,则可省去.
P(t)是t应满足的谓词.
【例3-11】有关系Student(学号,姓名,性别,出生年月,籍贯,地址,…),要求用元组关系演算表达式查询"北京"籍男学生的姓名.
解:{t[姓名]|t∈StudentANDt.
性别='男'ANDt.
籍贯='北京'}另外,利用元组关系演算,还可以表达关系代数运算.
关系代数的几种运算可以用元组第3章关系代数与关系数据库规范化45表达式表示如下.
1.
投影设有关系模式R(A,B,C),r为R的一个值,则()={[Π]|}ABrtABtr∈2.
选择仍用上述关系,则FrttrtFσ∈∈F是以t为变量的布尔表达式.
其中,属性变量以t.
A形式表示.
3.
并设r、s是R(A,B,C)的两个值,则RS∪可表示如下:(){|}()tRtSt∨或OR{|}ttRtS∈∈4.
差RS-可表示如下:(){|()}tRtSt∧或AND{|}ttRtS∈5.
连接设有关系模式R(A,B,C)和S(C,D,E),r、s分别为两个关系中某个时刻的值,则ANDrstABCDEtABCrtCDEs=∈∈谓词中的两个t[C]同值,隐含等连接.
元组关系演算与关系代数具有同等表达能力,也是关系完备的.
用谓词演算表示关系操作时,只有结果是有限集才有意义.
一个表达式的结果如果是有限的,则称此表达式是安全的,否则是不安全的.
否定常常会导致不安全的表达式,如(Stud{|e}nt)tt∈的结果不是有限的,是不安全的,因为现实世界中不属于Student的元组是无限多的.
实际上,在计算上述表达式时,我们感兴趣的范围既不是现实世界,也不是整个数据库,只是关系Student.
若限制t取值的域,使t∈DOM(P),可将上式改写成:(Student){|DOM()AND}DOM()StudenttPPtt∈∈=成为安全表达式.
3.
2.
2域关系演算域关系演算(DomainRelationalCalculus)以域为变量,一般形式为11111nnnnmXXXPXXXXX++其中,111nnnmXXXXX++为域变量,且前n个域变量出现在结果中,其他m个域变量不出现在结果中,但出现在谓词P中.
域关系演算是QBE(QueryByExample)语言的理论基础.
例如,对关系Grade(学号,课程号,成绩),如果查询需补考的学生的学号和补考的课程号,则查询表达式为46数据库原理及应用教程——基于Linux的MySQL和NoSQL应用Grade(,,)AND60}xyzxyzz是Grade中的一个元组,则该谓词为真.
元组变量的变化范围是一个关系;域变量的变化范围是某个值域.
3.
3关系代数表达式的优化在层次模型和网状模型中,用户使用过程化的语言表达查询要求、执行何种记录级的操作,以及操作的序列等,所以用户必须了解存取路径,系统要提供用户选择存取路径的手段,这样查询效率由用户的存取策略决定.
这两种模型要求用户有较高的数据库技术和程序设计水平.
而在关系模型中,关系系统的查询优化都是由数据库管理系统来实现的,用户不必考虑如何表达查询以获得较好的效率,只要告诉系统"干什么"即可,因为系统可以比用户程序的"优化"做得更好.
由数据库管理系统来实现查询优化的优势在于:①优化器可以从数据字典中获取许多统计信息,如关系中的元组数、每个属性值的分布情况等.
优化器可以根据这些信息选择有效的执行计划,而用户程序难以获得这些信息.
②如果数据库的物理统计信息改变了,系统可以自动对查询进行重新优化,以选择相适应的执行计划.
非关系系统中必须重写程序,而重写程序在实际应用中往往是不太可能的.
③优化器可以考虑数百种不同的执行计划,而程序员一般考虑有限的几种可能性.
④优化器中包括很多复杂的优化技术,这些优化技术往往只有最好的程序员才能掌握.
系统的自动优化相当于使得所有人都拥有这些优化技术.
实际系统对查询优化的具体实现不尽相同,但一般为如下4个步骤.
①将查询转换成某种内部表示,通常是语法树.
②根据一定的等价变换规则把语法树转换成标准(优化)形式.
③选择低层的操作算法.
语法树中的每个操作需要根据存取路径、数据的存储分布、存储数据的聚簇等信息,来选择具体的执行算法.
④生成查询计划.
查询计划也称为查询执行方案,是由一系列内部操作组成的.
这些内部操作按一定的次序构成查询的一个执行方案.
通常,这样的执行方案有多个,需要对每个执行计划计算代价,从中选择代价最小的一个.
总之,关系数据库查询优化的总目标是:选择有效的策略,求得给定关系表达式的值,以提高数据库管理系统的效率.
3.
4关系数据库理论关系数据库设计的基本任务是在给定的应用背景下,建立一个满足应用需求且性能良好的数据库模式.
具体来说,就是给定一组数据,如何决定关系模式及各关系模式中应该有哪些属性,才能使数据库系统在数据存储与数据操纵等方面都具有良好的性能.
关系数据库规范化理论以现实世界存在的数据依赖为基础,提供了鉴别关系模式合理与否的标准,以及改进不合理关系模式的方法,是关系数据库设计的理论基础.
第3章关系代数与关系数据库规范化473.
4.
1问题的提出如果一个关系没有经过规范化,可能导致数据冗余大、数据更新不一致、数据插入异常和删除异常的问题出现.
下面通过一个例子说明这些问题.
【例3-12】设有关系模式SC(Sno,Sname,Sage,Ssex,Sdept,Mname,Cno,Cname,Grade),属性分别表示学生学号、姓名、年龄、性别、系名、系主任姓名、课程号、课程名和成绩.
实例如表3-25所示,其关键字为(sno,cno).
仅从关系模式上看,该关系模式已经包括了需要的信息,如果按此关系模式建立关系,并对它进行深入分析,就会发现其中的问题.
表3-25关系模式SC的实例SnoSnameSageSsexSdeptMnameCnoCnameGrade1414855328刘惠红20女计算机系李中一C01C语言程序设计781414855328刘惠红20女计算机系李中一C02数据结构841414855328刘惠红20女计算机系李中一C03数据库原理681414855328刘惠红20女计算机系李中一C04数字电路902014010225李红利19女计算机系李中一C01C语言程序设计922014010225李红利19女计算机系李中一C02数据结构772014010225李红利19女计算机系李中一C03数据库原理832014010225李红利19女计算机系李中一C04数字电路792014010302张平18男电子系张超亮C05高等数学802014010302张平18男电子系张超亮C06机械制图832014010302张平18男电子系张超亮C07自动控制732014010302张平18男电子系张超亮C08电工基础92从表3-25中的数据情况可以看出,该关系存在以下问题.
①数据冗余.
数据冗余是指同一个数据被重复存储多次,是影响系统性能的重要问题之一.
在关系SC中,系名和系主任姓名(如计算机系的李中一)随着选课学生人数的增加而被重复存储多次.
数据冗余不仅浪费存储空间,还会引起数据修改的潜在不一致性.
②插入异常.
插入异常是指应该插入关系中的数据而未能插入.
例如,在尚无学生选修的情况下,要想将一门新课程的信息(如C05数据库原理与实践)插入关系SC,在属性Sno上会出现取空值的情况.
由于Sno是关键字中的属性,不允许取空值,因此受实体完整性约束的限制,该插入操作无法完成.
③删除异常.
删除异常是指不应该删除的数据而从关系中被删除了.
例如在SC中,学生(刘惠红)因退学而要删除该学生信息时,连同她选修的C02这门课程也一起删除了.
这是一个不合理的现象.
④更新异常.
更新异常是指对冗余数据没有全部被修改而出现不一致的问题.
例如在SC中,如果更改系名称或更换系主任,则分布在不同元组中的系名称或系主任都要修改,若有一个地方未修改,就会造成系名称或系主任不唯一,从而产生不一致现象.
由此可见,SC关系模式的设计就是一个不合适的设计.
例如,将上述关系模式分解成4个关系模式:S(Sno,Sname,Sage,Ssex,Sdept)Course(Cno,Cname)48数据库原理及应用教程——基于Linux的MySQL和NoSQL应用SC(Sno,Cno,Score)Dept(Sdept,Mname)这样4个关系模式都不会发生插入异常、删除异常的问题,数据冗余也得到了控制,数据更新也变得简单了.
"分解"是解决冗余的主要方法,也是规范化的一条原则,"关系模式有冗余问题,就分解它".
但是,上述关系模式的分解方案是否就是最佳的,也不是绝对的.
如果查询某位学生所在系的系主任名,就要对两个关系做连接操作,而连接的代价也是很大的.
一个关系模式的数据依赖会有哪些不好的性质,如何改造一个模式,这就是规范化理论讨论的问题.
3.
4.
2函数依赖1.
函数依赖的概念数据依赖是指通过一个关系中属性间值的相等与否体现出来的数据间的相互关系,是现实世界属性间相互联系的抽象,是数据内在的性质.
数据依赖有三种:函数依赖(FunctionalDependency,FD)、多值依赖(MultiValuedDependency,MVD)和连接依赖(JoinDependency,JD),函数依赖和多值依赖最重要.
在数据依赖中,函数依赖是最基本、最重要的,它是属性之间的一种联系,假设给定一个属性的值,就可以唯一确定(找到)另一个属性的值.
例如,知道某学生的学号,可以唯一地查询到其对应的系别,如果这种情况成立,就说系别函数依赖于学号.
这种唯一性并非指只有一个记录,而是指任何记录.
【定义3.
1】设关系模式12nRAAA,简记为R(U),X、Y是U的子集,r是R的任一具体关系,如果对r的任意两个元组12,tt,由12[][]tXtX=导致12[][]tYtY=,则称X函数决定Y,或Y函数依赖于X,记为X→Y.
X→Y为模式R的一个函数依赖.
1[]tX表示元组1t在属性集X上的值,2[]tX表示元组2t在属性集X上的值,FD是对关系R的一切可能的当前值r定义的,不是针对某个特定关系.
通俗地说,在当前值r的两个不同元组中,如果X值相同,就要求Y值也相同.
或者说,X的每个具体值都有Y唯一的具体值与之对应,即Y值由X值决定,因而这种数据依赖被称为函数依赖.
函数依赖类似数学中的单值函数,函数的自变量确定时,应变量的值唯一确定,反映了关系模式中属性间的决定关系,体现了数据间的相互关系.
在一张表中,两个字段值之间的一一对应关系被称为函数依赖.
通俗地讲,在一个数据库的表中,如果字段A的值能够唯一确定字段B的值,那么字段B函数依赖于字段A.
函数依赖的说明如下.
①函数依赖不是指关系模式R的某个或某些关系实例满足的约束条件,而是指R的所有关系实例均满足的约束条件.
②函数依赖是关系向数据库表示数据语义的机制.
人们只能根据数据的语义来确定函数依赖.
例如,"姓名→性别"函数依赖只在没有同名同姓的条件下成立;如果允许同名同姓存在同一关系中,则"性别"不再依赖于"姓名"了.
数据库设计者可以对现实世界作强制规定.
③属性间函数依赖与属性间的联系类型相关.
设有属性集X、Y和关系模式R,如果X与Y之间是1﹕1关系,则存在函数依赖;如果第3章关系代数与关系数据库规范化49X与Y之间是m﹕1关系,则存在函数依赖;如果X与Y之间是m﹕n关系,则X与Y之间不存在函数依赖.
④若X→Y,则X称为这个函数依赖的决定属性集.
⑤若X→Y且Y→X,则记为XY.
⑥若Y不函数依赖于X,则记为XY.
比如,学习关系模式R(Sno,Sname,Cno,Grade,Cname,Tname,Tage),其中各属性的含义为:Sno代表学生学号,Sname代表学生姓名,Cno代表课程号,Grade代表成绩,Cname代表课程名,Tname代表任课教师姓名,Tage代表教师年龄.
在R的关系r中存在着函数依赖,如Sno→Sname(每个学号只能有一个学生姓名),Cno→Cname(每个课程号只能对应一门课程名),Tname→Tage(每个教师只能有一个年龄),(Sno,Cno)→Grade(每个学生学习一门课只能有一个成绩).
【例3-13】设有关系模式R(A,B,C,D),具体关系r如表3-26所示.
表3-26R的具体关系rABCDa1b1c1d1a1b1c2d2a2b2c3d2a3b3c4d3属性A取一个值(如a1),则B中有唯一个值(如b1)与之对应,反之亦然,即属性A与属性B是一对一的联系,所以AB→且BA→.
又如,属性B中取一个值b1,那么属性C中有两个值c1、c2与之对应,即属性B与属性C是一对多的联系,所以BC,反之,C与B是多对一的联系,故CB→.
2.
函数依赖的类型(1)平凡函数依赖与非平凡函数依赖【定义3.
2】在关系模式R(U)中,对于U的子集X和Y,若X→Y但YX,则称X→Y是非平凡函数依赖.
若YX,则称X→Y为平凡函数依赖.
例如,X→,X→X都是平凡函数依赖.
显然,平凡函数依赖对于任何一个关系模式必然都是成立的,与X的任何语义特性无关,因此它们对于设计不会产生任何实质性的影响.
在今后的讨论中,如果不特别说明,都不考虑平凡函数依赖的情况.
(2)完全函数依赖和部分函数依赖【定义3.
3】在关系模式R(U)中,如果X→Y,并且对于X的任何一个真子集X′,都有X′Y,则称Y对X完全函数依赖,记为FXY→.
如果X→Y,如果存在X的某一真子集X′,使得XY′→,则称Y对X部分函数依赖,记为PXY→.
【例3-14】在表3-25中,(Sno,Cno)GradeF→是完全函数依赖,(Sno,Cno)SnameP→是部分函数依赖.
(3)传递函数依赖【定义3.
4】在关系模式R(U)中,X、Y、Z是R的3个不同的属性或属性组,如果X→50数据库原理及应用教程——基于Linux的MySQL和NoSQL应用Y(即Y不是X的子集),且YX,Y→Z,ZY,则称Z对X传递函数依赖,记为XY→.
传递依赖:假设A、B、C分别是同一个数据结构R中的三个元素或分别是R中若干数据元素的集合,如果C依赖B,而B依赖于A,那么C自然依赖于A,即称C传递依赖A.
因为条件YX,如果Y→X,那么XY,实际上是X→Z,是直接函数依赖而不是传递函数依赖.
【例3-15】表3-25中存在如下函数依赖:Sno→Sdept,Sdept→Mname,但SdeptSno,所以Sno→Mname.
识别函数依赖是理解数据语义的一个组成部分,依赖是关于现实世界的断言,它不能被证明,决定关系模式中函数依赖的唯一方法是仔细考察属性的含义.
【例3-16】有关系模式S(Sno,Sname,Sage,Ssex,Sdept,Mname,Cname,Score),判断以下函数依赖的对错.
(1)Sno→Sname,Sno→Ssex,(Sno,Cname)→score.
(2)Cname→Sno,Sdept→Cname,Sno→Cname.
在(1)中,Sno与Sname之间存在一对一或一对多的联系,Sno与Ssex、(Sno,Cname)与Score之间存在一对多联系,所以这些函数依赖是存在的.
在(2)中,因为Sno与Cname、Sdept与Cname之间都是多对多联系,所以它们之间是不存在函数依赖的.
【例3-17】有关系模式:学生课程(学号,姓名,课程号,课程名称,成绩,教师,教师年龄),成绩要由学号和课程号共同确定,教师决定教师年龄.
所以,此关系模式中包含了以下函数依赖关系:学号→姓名(每个学号只能有一名学生姓名与之对应),课程号→课程名称(每个课程号只能对应一个课程名称),(学号,课程号)→成绩(每名学生学习一门课只能有一个成绩),教师→教师年龄(每名教师只能有一个年龄).
属性间的函数依赖不是指关系模式R的某个或某些关系满足上述限定条件,而是指R的一切关系都满足定义中的限定.
只要有一个具体关系r违反了定义中的条件,就破坏了函数依赖,使函数依赖不成立.
识别函数依赖是理解数据语义的一个组成部分,依赖是关于现实世界的断言,它不能被证明,决定关系模式中函数依赖的唯一方法是仔细考察属性的含义.
3.
FD公理首先介绍FD的逻辑蕴涵的概念,然后引出FD公理.
FD的逻辑蕴涵是指在已知的函数依赖集F中是否蕴涵着未知的函数依赖.
比如,F中有AB→和BC→,那么AC→是否也成立这个问题即F是否逻辑蕴涵着AC→的问题.
【定义3.
5】有关系模式R(U,F),F是R上成立的函数依赖集.
XY→是一个函数依赖,如果对于R的关系r也满足XY→,那么称F逻辑蕴涵XY→,记为FXY→,即XY→可以由F中的函数依赖推出.
【定义3.
6】F是已知的函数依赖集,被F逻辑蕴涵的FD全体构成的集合称为函数依赖集F的闭包(Closure),记为F+,即{}FXYFXY+=→→.
显然,一般FF+.
【FD的公理】为了从已知F求出F+,尤其是根据F集合中已知的FD,判断一个未知的FD是否成立,或者求R的候选键,这就需要一组FD推理规则的公理.
FD公理有三条推理规则,是由W.
W.
Armstrong和C.
Beer建立的,常称为"Armstrong公理".
第3章关系代数与关系数据库规范化51设关系模式R(U,F),X、Y、U、F是R上成立的函数依赖集.
FD公理的3条规则如下.
①自反律:若在R中有YX,则XY→在R上成立,且蕴涵于F中.
②传递律:若F中的XY→和YZ→在R上成立,则XZ→在R上成立且蕴涵于F中.
③增广律:若F中的XY→在R上成立,则XZYZ→在R上也成立,且蕴涵于F中.
【例3-18】已知关系模式R(A,B,C),R上的FD集{,}FABBC=→→,求逻辑蕴涵于F且存在于F+中的未知的函数依赖.
根据FD的推理规则,由F中的函数依赖可推出包含在F+中的函数依赖共43个.
如根据规则①,可推出:A→,AA→,B→,BB→等.
根据已知AB→及规则②,可推出:ACBC→,ABAC→,ABB→等.
根据已知条件及规则③,可推出AC→等.
为了方便应用,除了上述3条规则,下面给出可由这3条规则可导出的3条推论.
④合并律:若XY→,XZ→,则XYZ→.
⑤分解律:若XYZ→,则XY→,XZ→.
⑥伪传递律:若XYYWZ→→,,则XWZ→.
4.
属性集闭包在实际使用中,经常要判断从已知的FD推导出FD:XY→在F+中,还要判断F中是否有冗余的FD和冗余信息,以及求关系模式的候选键等问题.
虽然使用Armstrong公理可以解决这些问题,但是工作量大、比较麻烦,不具有可操作性,为此引入属性集闭包的概念及求法,能够方便地解决这些问题.
【定义3.
7】有关系模式R(U),U上的FD集F,X是U的子集,则称所有用FD公理从F推出的FD:iXA→中iA的属性集合为X属性集的闭包,记为FX+.
从属性集闭包的定义可以得出下面的引理.
【引理3.
1】函数依赖XY→能用FD公理推出的充要条件是YX+.
由引理可知,判断XY→能否由FD公理从F推出,只要求X+,若X+中包含Y,则XY→成立,即F所逻辑蕴涵.
而且,求X+并不太难,比用FD公理推导简单得多.
下面介绍求属性集闭包的算法.
【算法3.
1】求属性集X相对FD集F的闭包X+.
输入:有限的属性集合U和U中的一个子集X,以及在U上成立的FD集F.
输出:X关于F的闭包X+.
步骤:(1)(0)XX=.
(2)(1)()XiXiA+=.
其中,A是这样的属性,在F中寻找尚未用过的左边是()Xi的子集的函数依赖:(0,1,,)jjYZjk→=,其中()jYXi.
即在jZ中寻找()Xi中未出现过的属性集A,若无这样的A,则转到(4)(3)判断是否有(1)()XiXi+=,若是,则转(4),否则转(2).
(4)输出()Xi,即为X的闭包X+.
对于(3)的计算停止条件,以下4种方法是等价的:(1)()XiXi+=.
当发现()Xi包含了全部属性时.
52数据库原理及应用教程——基于Linux的MySQL和NoSQL应用在F中函数依赖的右边属性中再也找不到()Xi中未出现的属性.
在F中未用过的函数依赖的左边属性已经没有()Xi的子集.
【例3-19】设有关系模式R(U,F),其中UABCDEI=FADABIBIECDIEC计算()AE+.
解:令{},(0)XAEXAE==,在F中找出左边是AE子集的函数依赖,其结果是AD→,EC→,所以(1)(0)XXDCACDE==.
显然,(1)(0)XX≠在F中找出左边是AEDC子集的函数依赖,其结果是CDI→,所以(2)(1)XXIACDEI==.
显然,(2)(1)XX≠,但F中未用过的函数依赖的左边属性已没有X(2)的子集,所以不必再计算,即()AEACDEI+=.
5.
F的最小依赖集mF【定义3.
8】如果函数依赖集F满足下列条件,则称F为最小依赖集,记为mF.
(1)F中每个函数依赖的右部属性都是一个单属性.
(2)F中不存在多余的依赖.
(3)F中的每个依赖,左边没有多余的属性【定理3.
1】每个函数依赖集F都与它的最小依赖集mF等价.
【算法3.
2】计算最小依赖集.
输入:一个函数依赖集F.
输出:F的等价的最小依赖集mF.
方法:(1)右部属性单一化.
应用分解规则,使F中的每个依赖的右部属性单一化.
(2)去掉各依赖左部多余的属性.
具体方法:逐个检查F中左边是非单属性的依赖,如XYA→.
只要在F中求X+,若X+中包含A,则Y是多余的,否则不是多余的.
依次判断其他属性,即可消除各依赖左边的多余属性.
(3)去掉多余的依赖.
具体方法:从第一个依赖开始,从F中去掉它(设该依赖为X→Y),然后在剩下的F依赖中求X+,看X+是否包含Y,若是,则去掉X→Y,否则不去掉.
这样依次做下去.
mF不是唯一的.
【例3-20】有关系模式R,其依赖集FABCCABCDACDBDEG,,}BECCGBDCEAG→→←,求F等价的最小依赖集mF.
解:(1)将依赖右边属性单一化,得到FABCCABCDACDBDEG,,}BECCGBDCEAG→→←.
(2)在1F中去掉依赖左部多余的属性.
对于ABC←,假设B是多余的,计算AA+=,由于CA+,因此B不是多余的.
同理,A也不是多余的.
对于ACDB→,()CDABCDEG+=,则A是多余的.
删除依赖左部多余属性后,得到2FABCCABCDCDBDEDGBECCGBCGDCEG(3)在2F中去掉多余的依赖.
对于CGB→,由于()CGABCDEG+=,则CGB→是多余第3章关系代数与关系数据库规范化53的.
删除多余的依赖后,得到结果:mFABCCABCDCDBDEDGBECCGDCEG6.
候选键的求解理论和算法归于给定的关系模式R及函数依赖集F,如何找出它的所有候选键(或称为候选码),这是基于函数依赖理论和范式判断该关系模式是否是"好"模式的基础,也是对于一个"不好"的关系模式进行分解的基础.
本节介绍3种求候选键的方法.
对于给定的关系12nRAAA和函数依赖集,可将其属性分为4类.
L类:仅出现在F的函数依赖左部的属性.
R类:仅出现在F的函数依赖右部的属性.
N类:在F的函数依赖左右均未出现的属性.
LR类:在F的函数依赖左右均出现的属性.
方法一:快速求解候选键的充分条件.
具体步骤:对于给定的关系模式R及其函数依赖F,如果X是R的L类和N类组成的属性集X+且包含了R的全部属性,则X是R的唯一候选键.
【定理3.
2】对于给定的关系模式R及其函数依赖F,如果X是R的R类属性,则X不在任何候选键中.
【例3-21】有关系模式R(A,B,C,D),其函数依赖集FDBBDADBACD求R的所有候选键.
解:观察F发现,A、C两属性是L类属性,其余为R类属性.
由于()ACABCD+=,因此AC是R的唯一候选键.
【例3-22】有关系模式RABCDEP,R的函数依赖集为{,,,FADEDDB=→→→,}BCDDCA→→,求R的所有候选键.
解:观察F发现,属性C、E是L类属性,属性P是N类属性.
由于()CEPABCDEP+=,因此CEP是R的唯一候选键.
方法二:左边为单属性的函数依赖集的候选键成员的图论判定法当LN类属性的闭包不包含全部属性时,方法一无法使用.
如果该依赖集等价的最小依赖集左边是单属性,可以使用图论判定法求出所有的候选键.
一个函数依赖图G是一个有序二元组(R,F),R中的所有属性是结点,所有依赖是边.
引入线/引出线:若结点iA到jA是连通的,则边(,)ijAA是结点iA的引出线,是结点jA的引入线.
原始点:只有引出线而无引入线的结点.
终结点:只有引入线而无引出线的结点.
途中点:既有引入线又有引出线的结点.
孤立点:既无引入线又无引出线的结点.
关键点:原始点和孤立点称为关键点.
关键属性:关键点对应的属性.
独立回路:不能被其他结点到达的回路.
求出候选键的具体步骤如下.
(1)求出F的最小依赖集mF.
54数据库原理及应用教程——基于Linux的MySQL和NoSQL应用(2)构造函数依赖图FDG.
(3)从图中找出关键属性X(可为空).
(4)查看G中有无独立回路,若无,则输出X,即R的唯一候选键,转(6);否则转(5).
(5)从各独立回路中各取一结点对应的属性,与X组合成候选键;重复这个过程,取尽所有可能的组合,即为R的全部候选键.
(6)结束【例3-23】有关系模式R(O,B,I,S,Q,D)FSDDSIBBIBOOB求R的所有候选键.
解:(1)mFFSDDSIBBIBOOB(2)构造函数依赖图如图3-1所示.
图3-1函数依赖(3)关键属性集:{Q}.
(4)得到4条回路,但回路IBI和BOB不是独立回路,而SDS和IBOBI是独立回路.
共2*3=6个候选键.
每个候选键有1+2=3个属性,所以R的所有候选键为:QSI,QSB,QSO,QDI,QDB,QDO.
R的每个候选键均由两部分组成:关键属性X,每个独立回路任选一个.
候选键个数等于各独立回路中节点个数的乘积.
每个候选键所含属性个数等于关键属性个数加上独立回路个数.
方法三:多属性依赖集候选键求解.
具体步骤如下:(1)求R的所有属性分为L、N、R和LR四类,令X代表L、N类,Y代表LR类.
(2)求X+,若包含了R的全部属性,则X为R的唯一候选键,转(5),否则转(3).
(3)在Y中取一属性A,求()XA+,若它包含R的全部属性,则A为R的候选键;调换一个属性,反复进行该过程,直到试完Y中的所有属性.
(4)如果已找出所有候选键,则转(5);否则,依次取2个、3个……求它们的属性闭包,直到闭包包含R的全部属性.
(5)停止,输出结果.
【例3-24】设有关系模式R(A,B,C,D,E),其上的函数依赖集F={A→BC,CD→E,B→D,E→A},求出R的所有候选键.
解:设X类属性为,Y类属性为A、B、C、D、E,则AABCDEBBDCC+++===,,,DDEABCDE++==,,所以A、E为R的其中两个候选键由于B、C、D属性还未在候选键中出现,因此将其两两组合与X类属性组合求闭包.
()BCABCDE+=,()BDBD+=,()CDABCDE+=,所以BC、CD为R的两个候选键.
所有Y类属性均已出现在候选键中,所以R的所有候选键为A、E、BC、CD.
IBQSDO第3章关系代数与关系数据库规范化553.
5关系模式的范式及规范化关系模式分解到什么程度是比较好的用什么标准衡量这个标准就是模式的范式(NormalForm,NF).
所谓范式,是指规范化的关系模式.
由于规范化的程度不同,产生了不同的范式.
最常用的有1NF、2NF、3NF、BCNF.
本节重点介绍这4种范式,最后简单介绍4NF,至于目前的最高范式5NF,有兴趣的读者可参见其他参考书.
范式是衡量关系模式优劣的标准.
范式的级别越高,其数据冗余和操作异常现象就越少.
范式之间存在如下关系:1NF2NF3NFBCNF4NF5NF通过分解(投影),把属于低级范式的关系模式转换为几个属于高级范式的关系模式的集合,这个过程称为规范化.
1.
1NF【定义3.
9】若关系模式R的具体关r中的所有属性都是不可分的基本数据项,则该关系属于1NF(FirstNormalForm,第一范式).
满足1NF的关系称为规范化的关系,否则称为非规范化关系.
关系数据库中研究和存储的都是规范化的关系,即1NF关系是作为关系数据库的最起码的关系条件.
例如,表3-27所示的r1中存在属性"班长",表3-28所示的r2存在重复组,它们均不属于1NF.
表3-27关系实例r1表3-28关系实例r2学号姓名班级班长借书人书名日期正班长副班长2014110102李丽1班陈因王贺李丽B1,B2D1,D22014110103魏红2班李科房名魏红B2,B3D2,D3非规范化关系的缺点是更新困难.
非规范化关系转化成1NF的方法:对于组项,去掉高层的命名,如对于r1,将"班长"属性去掉,如表3-29所示;对于重复组,重写属性值相同部分的数据,如将r2规范化为1NF,如表3-30所示.
表3-291NF规范化r1表3-301NF规范化r2学号姓名班级正班长副班长借书人书名日期2014110102李丽1班陈因王贺李丽B1D12014110103魏红2班李科房名李丽B2D2魏红B2D2魏红B3D32.
2NF1NF虽然是关系数据库中对关系结构最基本的要求,但还不是理想的结构形式,因为仍然存在大量的数据冗余和操作异常.
为了解决这些问题,就要消除模式中属性之间存在的部分函数依赖,将其转化成高一级的第二范式.
【定义3.
10】若关系模式R属于1NF,且其中每个非主属性都完全函数依赖于主键,则称R是第二范式(简记为2NF)的模式.
【例3-25】设有关系模式学生(学号,所在系,系主任姓名,课程号,成绩).
主键为(学号,56数据库原理及应用教程——基于Linux的MySQL和NoSQL应用课程名).
存在函数依赖:(学号,课程号)→所在系,(学号,课程号)→系主任姓名,(学号,课程号)→成绩,如图3-2所示.
图3-2函数依赖图由于存在非主属性对主键的部分依赖,因此该关系模式不属于2NF,而是1NF.
该关系模式中存在数据冗余:随着选课人数或选课门数的增加,系主任姓名和所在系被重复存储.
插入异常:新来的学生由于未选课而无法插入学生的信息.
删除异常:如果某系学生信息都删除,则该学生所在系和系主任姓名信息连带被删除.
根据2NF的定义,通过消除部分FD,按完全函数依赖的属性组成关系,将学生模式分解为:学生-系(学号,所在系,系主任姓名),选课(学号,课程号,成绩),规范化后如图3-3和图3-4所示.
图3-3分解后的学生-系函数依赖图图3-4分解后的选课函数依赖图显然,分解后的两个关系模式均属于2NF.
由2NF的定义可以得出以下结论.
属于2NF的关系模式R也必定属于1NF.
如果关系模式R属于1NF且R中全部是主属性,则R必定是2NF.
如果关系模式R属于1NF且R中所有的候选关键字全部是单属性构成,则R必定是2NF.
二元关系模式必定是2NF.
3.
3NF【定义3.
11】若关系模式R属于2NF,且每个非主属性都不传递依赖于主关键字,则称R是第三范式(简记为3NF)的模式.
若R∈3NF,则每个非主属性既不部分函数依赖于主键,也不传递函数依赖于主键.
上例分解后的关系模式选课(学号,课程名,成绩)是3NF,关系模式学生-系(学号,所在系,系主任姓名)是2NF.
2NF中仍然存在数据冗余和操作异常,如在学生-系关系模式中有以下问题.
数据冗余:学生选修多门课程时,他的系主任姓名仍然被重复存储.
插入异常:新成立的系由于没有学生和选课信息,该系和系主任姓名无法插入学生-所在系系主任姓名成绩学号课程号成绩学号课程号所在系系主任姓名学号第3章关系代数与关系数据库规范化57系关系.
删除异常:要删除某个系的所有学生,则该系及系主任姓名信息也被删除.
为了消除这些异常,将学生-系关系模式分解到更高的3NF.
产生异常的原因是该关系模式中存在非主属性"系主任姓名"对主键"学号"的传递依赖:学号→所在系,所在系→系主任姓名,但是所在系学号,所以学号→系主任姓名.
现在消除该传递依赖,将它们分解到两个关系中,将学生-系关系分解后的关系模式为:学生(学号,所在系),教学系(所在系,系主任姓名).
显然,分解后的各子模式均属于3NF.
由3NF的定义可以得出以下结论.
关系模式R是3NF,必定也是2NF或1NF,反之则不然.
如果关系模式R属于1NF且R中全部是主属性,则R必定是3NF.
4.
BCNF3NF中仍然存在一些特殊的操作异常问题,因为关系中可能存在由主属性作为主键的部分和传递函数依赖.
针对这个问题,Boyce和Codd提出了BCNF(BoyceCoddNormalForm).
通常认为,BCNF是修正的第三范式,有时也称为扩充的第三范式.
【定义3.
12】关系模式R是1NF,且每个属性都不传递函数依赖于R的候选关键字,则R为BCNF关系模式.
BCNF的另一种等价的定义如下.
【定义3.
13】设F是关系模式R的FD集,如果F中每个非平凡的函数依赖X→A,其左部都是R的候选关键字,则称R为BCNF关系模式.
【例3-26】设关系模式SC(U,F),其中U={SNO,CNO,SCORE},F={(SNO,CNO)→SCORE,(CNO,SCORE)→SNO}.
SC的候选键为(SNO,CNO)和(CNO,SCORE),决定因素中都包含候选键,没有属性对候选键传递依赖或部分依赖,所以SC为BCNF.
【例3-27】设关系模式STJ(S,T,J),其中S为学生,T为教师,J为课程.
每位教师只教一门课,每门课有若干教师,某学生选定某门课,就对应一位固定的教师.
由语义可得到如下函数依赖:(S,J)→T,(S,T)→J,T→J.
该关系模式的候选键为(S,J),(S,T).
该关系模式中的所有属性都是主属性,所以STJ为3NF,但不是BCNF,因为T是决定因素,但T不包含键.
该关系模式仍然存在数据冗余问题.
如关系模式STJ中,如果有100名学生选定某门课,则教师与该课程的关系会被重复存储100次.
STJ可分解为如下两个满足BCNF的关系模式,以消除冗余:TJ(T,J),ST(S,T).
从BCNF的定义可以得出以下结论.
如果关系模式R属于BCNF,则它必定属于3NF;反之,则不一定成立.
二元关系模式R必定是BCNF.
都是主属性的关系模式并非一定属于BCNF.
显然,满足BCNF的条件要强于满足3NF的条件.
建立在函数依赖概念基础上的3NF和BCNF是两种重要特性的范式,在实际数据库的设计中具有特别的意义.
设计模式如果能达到3NF或BCNF,其关系的更新操作性能和存储性能都是比较好的.
从非关系到1NF、2NF、3NF和BCNF直到更高级别的关系,这个变换或分解的过程被称为关系的规范化处理.
58数据库原理及应用教程——基于Linux的MySQL和NoSQL应用5.
4NF从数据库设计的角度看,在函数依赖的基础上,分解为BCNF的模式中仍然存在数据冗余问题.
为了处理这些问题,必须引入新的数据依赖的概念及范式,如多值依赖、连接依赖和相应的更高范式:4NF、5NF.
本节仅介绍多值依赖和4NF.
【定义3.
14】给定关系模式R及其属性X和Y,对于给定的X值,有一组Y值与之对应,而与其他属性(R-X-Y)没有关系,则称Y多值依赖于X或X多值决定Y,记为X→→Y.
例如,关系模式WSC(W,S,C)如表3-31所示,W表示仓库,S表示报关员,C表示商品.
表3-31关系模式WSCWSCWSCW1S1C1W1S2C3W1S1C2W2S3C4W1S1C3W2S3C5W1S2C1W2S4C4W1S2C2W2S4C5按照语义,对于每个W,S都有一个集合与之对应,而不论C取值是什么,即W→→S,且W→→C.
函数依赖是多值依赖的特例,即若X→Y,则X→→Y.
【定义3.
15】在多值依赖定义中,如果属性集Z=U-X-Y为空,则该多值依赖为平凡多值依赖,否则为非平凡多值依赖.
【定义3.
16】关系模式R为1NF,如果对于R的每个非平凡多值依赖X→→Y,Y→→X,X包含R的一个候选键,则称R是4NF.
例如,关系模式WSC的候选键为(W,S,C),非平凡多值依赖为W→→S,W→→C,所以不是4NF.
从而,需要分解为WS(W,S)和WC(W,C).
当F中只包含函数依赖时,符合4NF的就符合BCNF,但符合BCNF的不一定符合4NF,符合4NF的一定符合BCNF.
几种范式的规范化关系如图3-5所示.
图3-5范式的规范化关系1NF消除非主属性对键的部分函数依赖2NF消除非主属性对键的传递函数依赖3NF消除非主属性对键的部分传递函数依赖BCNF消除非平凡且非函数依赖的多值依赖4NF消除非候选键所隐含的连接依赖5NF第3章关系代数与关系数据库规范化593.
6关系模式的分解3.
4节中,通过分解的方法消除了模式中的操作异常,减少和控制了数据冗余问题.
要使关系模式的分解有意义,模式分解需要满足一些约束条件是分解不能破坏原来的语义,即模式分解要符合无损连接和保持函数依赖的原则.
本节主要讨论关系模式分解中的两个重要特性:保持信息的无损连接和保持函数依赖性.
1.
无损连接的分解无损连接保证分解前后关系模式的信息不能丢失和增加,保持原有的信息不变.
反映了模式分解的数据等价原则.
如果不能保持无损连接性,那么在关系中就会出现错误的信息.
【定义3.
17】设12nRRRρ是R的一个分解,若对于任意R的关系实例r,都有12ΠΠ)ΠnRRRrrrr=,则称该分解满足F的无损连接分解,简称无损分解;否则,称为有损连接分解,简称有损分解.
其中,是r在关系模式nR上的投影.
例如,关系模式R(A,B,C)和具体关系r如表3-32所示,其中R被分解的两个关系模式{,}ABACρ=,r在这两个模式上的投影分别如表3-33和表3-34所示.
显然,12rrr=,即分解ρ是无损分解.
表3-32无损连接之关系r表3-33关系1r表3-34关系2rABCABAC225222523523如果是有损分解,则说明分解后的关系进行自然连接的结果比分解前的R反而增加了元组,使原来关系中一些确定的信息变成不确定的信息,因此是有害的错误信息,对连接查询操作是极为不利的.
例如,关系模式S(Sno,Cno,Grade)和具体关系s如表3-35所示,S的一个分解为ρ={(Sno,Cno),(Sno,Grade)},对应的两个关系1s和2s如表3-36和表3-37所示.
此时12sss≠,如表3-38所示,多出了两个元组(值加下划线的元组).
显然,这两个元组有悖于原来s中的元组,使原来元组值变成了不确定的信息.
表3-35有损连接分解关系s表3-36关系1sSnoCnoGradeSnoCno20121129020121122012113802012113表3-37关系2s表3-38关系12ssSnoGradeSnoCnoGrade2012119020121129020121180201211280201211390201211380将关系模式R分解成12nRRRρ后,如何判定该分解是否为无损连接分解这是一60数据库原理及应用教程——基于Linux的MySQL和NoSQL应用个值得关心的问题.
下面分别介绍判定是否具有无损连接分解的方法:判定表法.
【算法3.
3】无损连接的测试.
输入:关系模式12nRAAA=,R上成立的函数依赖集F,R的一个分解12nRRRρ.
输出:判断ρ相对于F是否具有无损连接特性.
方法:(1)构造一张k行n列的表格,每行对应模式1iRik≤≤(),每列对应属性1jAjn≤≤().
如果jA在iR中,那么在表格的第i行第j列处填ja,否则填ijb.
(2)反复检查F的每个函数依赖,并修改表格中的元素,方法如下:取F中的函数依赖X→Y,如果表格中有两行在X分量上相等,在Y分量上不相等,那么修改Y,使这两行在Y分量上也相等;如果Y分量中有一个是ja,那么另一个也修改成ja;如果没有ja,那么用其中一个ijb替换另一个符号(尽量把下标改成较小的数);直到表格不能修改为止.
这个过程称为Chase过程.
(3)若修改到最后一张表格中有一行是全a,即12,,,naaa,那么ρ相对于F是无损联接分解.
【例3-28】设R=(A,B,C,D,E),1234RADRABRBERCDE====,,,,5(,)RAE=,设函数依赖是A→C,B→C,C→D,DE→C,CE→A.
判断R被分解为12345RRRRRρ=是否为无损联接分解.
解:Chase过程的初始表如表3-39所示.
表3-39初始表ABCDEAD1a12b13b4a15bAB1a2a23b24b25bBE31b2a33b34b5aCDE41b42b3a4a5aAE1a52b53b54b5a根据A→C,对表3.
39进行处理,将13b、23b、53b改成13b,即132353bbb==;考虑B→C,则将33b改成13b.
修改后的表格如表3-40所示.
表3-40修改表(一)ABCDE1a12b13b4a15b1a2a13b24b25b31b2a13b34b5a41b42b3a4a5a1a52b13b54b5a考虑C→D,则将第4列的24b、34b、54b均改成4a,结果如表3-41所示.
考虑DE→C,则将C所在列的第3、4和5行的元素改为3a,结果如表3-42所示.
考虑CE→A,则将第1列的第3、4、5行的元素都改成1a,结果如表3-43所示.
可以看出,此时第3行已是全a,因此R分解成12345RRRRRρ=是无损联接分解.
第3章关系代数与关系数据库规范化61表3-41修改表(二)ABCDE1a12b13b4a15b1a2a13b4a25b31b2a13b4a5a41b42b3a4a5a1a52b13b4a5a表3-42修改表(三)ABCDE1a12b13b4a15b1a2a13b4a25b31b2a13b4a5a41b42b3a4a5a1a52b13b4a5a表3-43修改表(四)ABCDE1a12b13b4a15b1a2a13b4a25b1a2a3a4a5a1a42b3a4a5a1a52b3a4a5a2.
保持函数依赖的分解保持依赖性分解(简称保持依赖)是关系模式分解的另一个分解特性,分解后的关系不能破坏原来的函数依赖(不能破坏原来的语义),即保持分解前、后原有的函数依赖依然成立.
保持依赖反映了模式分解的依赖等价原则.
例如,学生成绩的关系G(Sno,Cname,Tname,Grade)的实例如表3-44所示,函数依赖集如下:(Sno,Cname)→Tname,Grade(Sno,Tname)→Cname,GradeTname→Cname表3-44关系GSnoCnameTnameGrade010125数据库原理张三96010138数据库原理张三88020308数据库原理张三90010125C语言程序设计王四92分解为:62数据库原理及应用教程——基于Linux的MySQL和NoSQL应用SCT(Sno,Cname,Grade)ST(Sno,Tname)如表3-45和表3-46所示.
表3-45关系SCT表3-46关系STSnoCnameGradeSnoTname010125数据库原理96010125张三010138数据库原理88010138张三020308数据库原理90020308张三010125C语言程序设计92010125王四但是丢失了函数依赖:Tname→Cname,不能体现一个教师只开一门课的语义.
【定义3.
18】设F是关系模式R(U)上的FD集,ZU,F在Z上的投影用Π()ZF表示,定义为ΠZFXYXFXYZ+→→∈【定义3.
19】设R的一个分解12nRRRρ=,F是R上的依赖集,如果F等价于12Π)ΠΠkRRRUFFF=,则称分解ρ具有依赖保持性.
由于UF,即UF++必成立,因此只要判断FU++是否成立即可.
具体方法如下:对F中有而R中没有的每个X→Y,求X相对于函数依赖集U的闭包,如果所有Y都有GYX+,则称分解具有依赖保持性,如果存在某个Y,有GYX+,则分解不具依赖保持性.
【例3-29】设关系模式R{A,B,C,D,E},F={A→B,B→C,C→D,D→A}是依赖集,{,,}ABBCCDρ=是R的一个分解,判断该分解是否具有依赖保持性.
解:因为(){,ΠΠΠ}ΠΠΠ}ABBCCDABBCCDFABBAFBCCBFCDDCUFFFABBABCCBCDDC=→→=→→=→→=所以,AB→,BC→,CD→均得以保持.
对于D→A,由于GDABCD+=,GAD+,因此该分解具有依赖保持性.
无损连接不一定具有依赖保持性,同样,依赖保持性分解不一定具有无损连接.
思考:设(,,)RABCFABCB=→→是依赖集,判断分解1(,)ABACρ、2(,)ABBCρ是否具有无损连接性和依赖保持性3.
模式分解的算法范式和分解是数据库设计中两个重要的概念和技术.
关系规范化的手段是分解,将关系分解成3NF和BCNF后,是否一定能保证分解都具有无损连接性和保持函数依赖性呢研究的结论是:若要求分解既具有无损连接又具有保持依赖保持性,则分解总可以达到3NF.
分解成BCNF的集合只存在无损连接性,不保持函数依赖性.
【算法3.
4】把关系分解为3NF,使它具有依赖保持性.
第3章关系代数与关系数据库规范化63输入:关系模式R和R的最小依赖集mF.
输出:R的一个分解12kRRRρ=,1,2,,iRik=()为3NF,ρ具有无损连接性和依赖保持性.
方法:(1)如果mF中有一依赖X→A,且XA=R,则输出,转(4).
(2)如果R中某些属性与F中所有依赖的左右部都无关,则将它们构成关系模式,从R中将它们分出.
(3)对于mF中的每个iiXA→,都构成一个关系子模式iiRXA=.
(4)停止分解,输出ρ.
【例3-30】有关系模式R,U={C,T,H,R,S,G},F={CS→G,C→T,TH→R,HR→C,HS→R},将其保持依赖性分解为3NF.
解:求出F的最小依赖集mFCSGCTTHRHRCHSR使用算法3.
4:(1)不满足条件.
(2)不满足条件.
(3)12345RCSGRCTRTHRRHRCRHSR(4)CSGCTTHRHRCHSRρ=.
【算法3.
5】把一个关系模式分解为3NF,使它既具有无损连接性又具有依赖保持性.
输入:关系模式R和R的最小依赖集mF.
输出:R的一个分解12kRRRρ=,1,2,,iRik=()为3NF,ρ具有无损连接性和依赖保持性.
方法:(1)根据算法3.
5,求出依赖保持性分解12kRRRρ=.
(2)判断ρ是否具有无损连接性,若是,则转(4).
(3)令{}Xρρ=∪,其中X是候选键.
(4)输出ρ.
【例3-31】设有关系模式R,U={C,T,H,R,S,G},F={CS→G,C→T,TH→R,HR→C,HS→R},将其无损连接和保持依赖性分解为3NF.
解:(1)由上例求出依赖保持性分解:CSGCTTHRHRCHSRρ=.
(2)判断其无损连接性,由此可知,该分解具有无损连接性,则转(4).
(3)不执行.
(4)输出CSGCTTHRHRCHSRρ=.
【算法3.
6】把一个关系模式无损分解为BCNF.
输入:关系模式R和R的依赖集F.
输出:R的无损分解12kRRRρ=.
方法:(1)令()Rρ=.
(2)若ρ中所有模式都是BCNF,则转(4).
(3)若ρ中有一个关系模式S不是BCNF,则其中必能找到一个函数依赖X→A,有X不64数据库原理及应用教程——基于Linux的MySQL和NoSQL应用是R的候选键且A不属于X,设12sXAsSA==,,用分解12(,)ss代替S,然后转(2).
(4)分解结束,输出ρ.
【例3-32】设有关系模式R,U={C,T,H,R,S,G},F={CS→G,C→T,TH→R,HR→C,HS→R},将其无损连接分解为BCNF.
解:R上只有一个候选键HS.
(1)令{}CTHRSGρ=.
(2)ρ中的关系模式不是BCNF.
(3)考虑CSG→,这个函数依赖不满足BCNF条件,将CTHRSG分解为CSG和CTHRS.
CSG已是BCNF,CTHRS不是BCNF,进一步分解;选择CT→,把CTHRS分解为CT和CHRS.
CT已是BCNF,CHRS不是BCNF,进一步分解;选择HSR→,把CHRS分解为HRS和CHS.
这时,HRS和CHS均为BCNF.
(4)CSGCTHRCCHSρ=.
进行模式分解时,除考虑数据等价和依赖等价以外,还要考虑效率.
当对数据库的操作主要是查询时,为了提高查询效率,可保留适当的数据冗余,让关系模式中的属性多些,而不把模式分解得太小,否则为了查询数据,常常要做大量的连接运算,把多个关系模式连在一起才能从中找到相关数据.
在设计数据库时,为了减少冗余、节省空间,把关系模式一再分解,到使用数据库时,为查询相关数据,把关系模式一再连接,花费大量时间,或许得不偿失.
因此,保留适量冗余,达到以空间换时间的目的,也是模式分解的重要原则.
在关系数据库中,对关系模式的基本要求是满足1NF,在此基础上,为了消除关系模式中存在的插入异常、删除异常、更新异常和数据冗余等问题,人们寻求解决这些问题的方法,这就是规范化的目的.
规范化的基本思想是逐步消除数据依赖中不合适的部分,使模式中的各关系模式达到某种程度的"分离".
让一个关系描述一个概念、一个实体或实体间的一种联系,若多于一个概念,就把它"分离",因此规范化实质上是概念的单一化.
关系模式的规范化过程是通过对关系模式的分解来实现的,把低一级的关系模式分解为若干高一级的关系模式,对关系模式进一步规范化,使之逐步达到2NF、3NF、4NF和5NF.
各种规范化之间的关系为:5NF4NFBCNF3NF2NF1NF关系规范化的递进过程见图3-5.
一般来说,规范化程度越高,分解就越细,所得数据库的数据冗余越小,且更新异常相对减少.
但是,如果某关系经过数据大量加载后主要用于检索,那么,即使它是一个低范式的关系,也不要去追求高范式而将其不断进行分解,因为在检索时会通过多个关系的自然连接才能获得全部信息,从而降低了数据的检索效率.
数据库设计满足的范式越高,其数据处理的开销也越大.
因此,规范化的基本原则是:由低到高,逐步规范,权衡利弊,适可而止.
通常,以满足3NF为基本要求.
第3章关系代数与关系数据库规范化65把一个非规范化的数据结构转换成第三范式,一般经过以下步骤.
(1)把该结构分解成若干属于1NF的关系.
(2)对那些存在组合码且有非主属性部分函数依赖的关系必须继续分解,使所得关系都属于2NF.
(3)若关系中有非主属性传递依赖于键,则继续分解之,使得关系都属于3NF.
事实上,规范化理论是在与SQL结合时产生的.
关系理论的基本原则指出,数据库被规范化后,其中的任何数据子集都可以用基本的SQL操作获取,这就是规范化的重要性所在.
数据库不进行规范化,就必须通过编写大量复杂代码来查询数据.
规范化规则在关系建模和关系对象建模中同等重要.
小结本章介绍了关系数据库的重要概念包括关系模型的数据结构、关系的三类完整性约束及关系的操作,介绍了关系代数中传统的集合运算和专门的关系运算,最后介绍了数据库设计的规范化的必要性,并结合案例讲解了具体的操作步骤.
思考与练习31.
简述候选键、主键、组合键、外键的定义.
2.
关系模型的完整性规则有哪几类举例说明实体完整性和参照完整性.
3.
举例说明等值连接和自然连接的区别和联系.
4.
对关系S和关系R进行集合运算,结果中既包含S中元组也包含R中元组,这种集合运算称为().
A.
并运算B.
交运算C.
差运算D.
积运算5.
专门的关系运算不包括().
A.
连接运算B.
选择运算C.
投影运算D.
交运算6.
下列描述中,正确的是().
A.
一个数据库只能包含一个数据表B.
一个数据库可以包含多个数据表C.
一个数据库只能包含两个数据表D.
一个数据表可以包含多个数据库7.
在关系模型中,实现"关系中不允许出现相同的元组"的约束是通过()来实现的.
A.
候选键B.
主键C.
外键D.
超键8.
在数据库中,产生数据不一致的根本原因是().
A.
数据存储量太大B.
没有严格保护数据C.
未对数据进行完整性控制D.
数据冗余9.
设有关系R(S,D,M),其函数依赖集F={S→D,D→M},则关系R至多满足().
A.
1NFB.
2NFC.
3NFD.
BCNF10.
R是一个关系模式,如果R中的每个属性A的值域中的每个值都是不可分解的,则R属于().
A.
1NFB.
2NFC.
3NFD.
BCNF11.
有关系模式R(课程,教师,学生,成绩,时间,教室),其中函数依赖集F={课程→教师,(学生,课程)→成绩,(时间,教室)→课程,(时间,教师)→教室,(时间,学生)→教室},关系模式R的66数据库原理及应用教程——基于Linux的MySQL和NoSQL应用一个主键是(1),R规范化程度最高达到(2).
若将关系模式R分解为3个关系模式R1(课程,教师),R2(学生,课程,成绩),R3(学生,时间,教室,课程),则其中R2的规范化程度最高达到(3).
(1)A.
(学生,课程)B.
(时间,教室)C.
(时间,教师)D.
(时间,学生)(2)A.
1NFB.
2NFC.
3NFD.
BCNF(3)A.
1NFB.
2NFC.
3NFD.
BCNF12.
两个基本关系(表):学生(学号,姓名,系号),系(系号,系名,系主任),学生表的主键为学号,系表的主键为系号,因此系号是学生表的().
A.
主键B.
外键C.
域D.
映像13.
下列对关系数据库的描述中,正确的是().
A.
每一列的分量是同一类型的数据来自同一个域B.
不同列的数据可以出自同一个域C.
行的顺序可以任意交换,但列的顺序不能任意交换D.
关系中的任意两个元组不能完全相同14.
若D1={a1,a2,a3},D2={b1,b2,b3},则D1*D2的集合中有元组()个.
A.
6B.
8C.
9D.
1215.
在关系数据库中,投影操作是指从关系中().
A.
抽出特定的记录B.
抽出特定的字段C.
建立相应的影响D.
建立相应的图形16.
关系数据库中元组的集合称为关系.
通常,标识元组的属性或最小属性组的是().
A.
标记B.
字段C.
主键D.
索引17.
关系数据库实体之间,联系的实现是通过().
A.
网结构B.
树结构C.
二维表D.
线性表18.
在关系数据库中,用来表示实体间联系的是().
A.
网结构B.
树结构C.
属性D.
二维表19.
公司有多个部门和多名职员,每个职员只能属于一个部门,一个部门可以有多名职员,则实体部门和职员间的联系是()A.
1﹕m联系B.
m﹕n联系C.
1﹕1联系D.
m﹕1联系20.
在满足实体完整性约束的条件下,().
A.
一个关系中可以没有候选关键词B.
一个关系中只能有一个候选关键词C.
一个关系中必须有多个候选关键词D.
一个关系中应该有一个或者多个候选关键词21.
有表示学生选课的三张表,学生S(学号,姓名,性别,年龄,身份证号),课程C(课号,课名),选课SC(学号,课号,成绩),则表SC的键为().
A.
课号,成绩B.
学号,成绩C.
学号,课号D.
学号,姓名,成绩22.
在下列关系运算中,不改变关系表中的属性个数但能减少元组个数的是().
第3章关系代数与关系数据库规范化67A.
并B.
交C.
投影D.
笛卡儿乘积23.
下列叙述中正确的是().
A.
为了建立一个关系,首先要构造数据的逻辑关系B.
表示关系的二维表中各元组的每个分量还可以分成若干数据项C.
一个关系的属性名表称为关系模式D.
一个关系可以包括多个二维表24.
假设员工关系EMP(员工号,姓名,部门,部门电话,部门负责人,家庭住址,家庭成员,成员关系),如果一个部门可以有多名员工,一个员工可以有多个家庭成员,那么关系EMP属于(1)且(2)问题.
(1)A.
1NFB.
2NFC.
3NFD.
BCNF(2)A.
无冗余、无插入异常和删除异常B.
无冗余,但存在插入异常和删除异常C.
存在冗余,但不存在修改操作的不一致D.
存在冗余、修改操作的不一致,以及插入异常和删除异常25.
关系模式规范化的最基本的要求是达到1NF,即满足().
A.
每个非主属性都完全依赖于键B.
主属性唯一标识关系中的元组C.
关系中的元组不可重复D.
每个属性都是不可再分的26.
在关系模式R中,Y函数依赖于X的语义是().
A.
在R的某个关系中,若两个元组的X值相等,则Y值也相等B.
在R的某个关系中,若两个元组的X值相等,则Y值不相等C.
在R的某个关系中,Y值应与X值相等D.
在R的某个关系中,Y值不应与X值相等27.
某教务管理系统有部分基本表如下:专业(专业号,专业名称,专业负责人),为专业号设置主键约束,为专业名称设置唯一约束;教师(教师编号,教师姓名,性别,民族,专业),为教师编号设置主键约束,为性别设置检查约束:性别取值为"男"或"女",为专业设置外键约束.
现向教师表和专业表填充数据如下:教师专业教师编号教师姓名性别民族专业专业号专业名称专业负责人09087李晓平女汉族CSCS计算机科学与技术钱晓敏09088朱焘女汉族CSIS信息管理与信息系统王大雷09089杨坤男回族IS(1)根据关系模型中数据完整性要求判断,能否向教师表添加一条新的教师记录(09088,张立,男,汉族)请说明原因.
(2)根据关系模型中数据完整性要求判断,能否向专业表添加一条新的专业记录(JK,计算机科学与技术,于蒙)请说明原因.
(3)根据关系模型中数据完整性要求判断,能否将教师表中的教师所在专业号从CS更新为JK请说明原因.
(4)根据关系模型中数据完整性要求判断,能否删除专业表中的专业号为CS的记录请说68数据库原理及应用教程——基于Linux的MySQL和NoSQL应用明原因.
28.
设学生选课数据库的关系模式为:Student(Sno,Sname,Sage,Ssex),SC(Sno,Cno,Grade),Course(Cno,Cname,Teacher).
其中,Student为学生关系,Sno表示学号,Sname表示学生姓名,Sage表示年龄,Ssex表示性别;SC为选课关系,Cno表示课程号,Grade表示成绩;C为课程关系,Cname表示课程名,Teacer表示任课教师,试用关系代数表达式表示下列查询:(1)查询年龄小于20岁的女学生的学号和姓名.
(2)查询"张晓东"老师所讲授课程的课程号和课程名.
(3)查询"王明"所选修课程的课程号、课程名和成绩.
(4)查询至少选修两门课程的学生的学号和姓名.
29.
设有关系模式R(职工号,日期,日营业额,部门名,部门经理),现利用该模式统计商店里每个职工的日营业额、职工所在的部门和部门经理.
如果规定:每个职工每天只有一个营业额,每个职工只在一个部门工作,每个部门只有一个经理.
试回答下列问题:(1)根据上述规定,写出R的基本函数依赖和候选键.
(2)说明R不是2NF的理由,并把R分解成2NF模式集.
(3)将关系R分解成3NF模式集.
30.
设有一个教师任课的关系,其关系模式如下:TDC(Tno,Tname,Title,Dno,Dname,Dloc,Cno,Cname,Credit).
其中,各属性分别表示:教师编号、教师姓名、职称、系编号、系名称、系地址、课程号、课程名、学分.
(1)写出该关系的函数依赖,分析是否存在部分依赖,是否存在传递依赖.
(2)该关系的设计是否合理存在哪些问题(3)对该关系进行规范化,使规范化后的关系属于3NF.
实验:关系的完整性、规范化理解与应用一、实验目的(1)了解关系模型的基本概念,掌握候选键和主键的确定.
(2)掌握并应用完整性规则.
(3)掌握关系规范化的定义和方法.
二、实验内容对于某公司员工管理系统,其中部门信息表和员工信息表分别见表3-16和表3-17.
请分析:①确定部门表和员工表中的候选键,并陈述理由.
部门表:部门代码,(负责人,部门名)理由:部门代码可以唯一标识一个部门,负责人和部门名也可以唯一标识一个部门.
表3-47部门信息表部门代码部门名负责人地点0001生产部李华江北京海淀0002营销部张丽安徽阜阳0003客服部王欣浙江宁波0004财务部张克云浙江杭州第3章关系代数与关系数据库规范化69表3-48员工信息表员工代码姓名家庭住址联系电话邮政编码部门代码201501王梅宁波869609863100060001201302李想阜阳854387693100100003201403张丽柳州878935423100170002201104李华江鞍山828498733101010001员工表:员工代码理由:员工代码能唯一标识一个员工.
②选择部门表和员工表的关键字.
部门表:部门代码员工表:员工代码③在部门表和员工表的结构中标注主关键字.
部门表(部门代码,部门名,负责人,地点)员工表(员工代码,姓名,家庭住址,联系电话,邮政编码,部门代码)④在员工表中确定可能的组合关键字,并陈述理由.
员工代码理由:只有员工代码能唯一标识一个员工.
⑤确定在部门表和员工表中共有的属性.
部门代码⑥指出哪个表中的属性是外关键字.
员工表中的部门代号是外关键字⑦确定哪个表是主表,哪个表是从表.
主表是员工表,从表是部门表.
⑧部门表和员工表是如何通过关键字实施数据完整性的部门表中,部门代号不能为空,这就保证了部门的存在性.
员工表中,员工代码不能为空,这说明有这样的员工.
三、观察与思考(1)有供应商关系S(如表3-49所示,主键是"供应商号")和零件关系P(如表3-50所示,主键是"零件号",外键是"供应商号").
表3-49供应商关系S表3-50零件关系P供应商号供应商名所在城市零件号颜色供应商号B01红星北京010红B01S10宇宙上海312白S10T20黎明天津201蓝T20Z01立新重庆如果向P中插入新行,新行的值见如下选项.
那么,哪些行能够插入哪些行不能,为什么A.
(037,绿,null)B.
(null,黄,T20)C.
(201,红,T20)D.
(105,蓝,B01)E.
(101,黄,T11)70数据库原理及应用教程——基于Linux的MySQL和NoSQL应用(2)某同学设计了图书在线交易系统,设计了订单表(如表3-51所示),请用规范化理论将该表进行分解,使之满足3NF的规范化要求.
表3-51订单表订单号订户代号姓名地址书号书名出版单位单价订购数量20150808001U2015003郭一北京海淀区17号03422计算机组成原理电子工业出版社32.
003020150808001U2015003胡二浙江宁波东路8号04532数据库技术及应用电子工业出版社28.
002020150808001U2015003王三安徽阜阳颍东路6号01022管理学原理电子工业出版社27.
003520150808002U2015004张四辽宁沈阳开发区11号03421宏观经济学人民邮电出版社35.
006520150808002U2015004欧阳五海南三亚环城路123号08785统计学人民邮电出版社29.
00343.
项目管理表(如表3-52所示)包含了项目、部件和部件向项目已提供的数量等信息.
请采用规范化分析方法,将该表规范化到3NF要求.
表3-52项目管理表部件号部件名现有数量项目编号项目内容代码项目负责人编号已提供数量205CAM3012AAA011020BBB0215210COG15512AAA013025CCC112530DDD1215

香港 1核 1G 5M 22元/月 美国 1核 512M 15M 19.36元/月 轻云互联

轻云互联成立于2018年的国人商家,广州轻云互联网络科技有限公司旗下品牌,主要从事VPS、虚拟主机等云计算产品业务,适合建站、新手上车的值得选择,香港三网直连(电信CN2GIA联通移动CN2直连);美国圣何塞(回程三网CN2GIA)线路,所有产品均采用KVM虚拟技术架构,高效售后保障,稳定多年,高性能可用,网络优质,为您的业务保驾护航。官方网站:点击进入广州轻云网络科技有限公司活动规则:用户购买任...

易探云330元/年,成都4核8G/200G硬盘/15M带宽,仅1888元/3年起

易探云服务器怎么样?易探云是国内一家云计算服务商家,致力香港云服务器、美国云服务器、国内外服务器租用及托管等互联网业务,目前主要地区为运作香港BGP、香港CN2、广东、北京、深圳等地区。目前,易探云推出的国内云服务器优惠活动,国内云服务器2核2G5M云服务器低至330元/年起;成都4核8G/200G硬盘/15M带宽,仅1888元/3年起!易探云便宜vps服务器配置推荐:易探云vps云主机,入门型云...

ZJI:韩国BGP+CN2线路服务器,国内三网访问速度优秀,8折优惠码每月实付440元起

zji怎么样?zji最近新上韩国BGP+CN2线路服务器,国内三网访问速度优秀,适用8折优惠码zji,优惠后韩国服务器最低每月440元起。zji主机支持安装Linux或者Windows操作系统,会员中心集成电源管理功能,8折优惠码为终身折扣,续费同价,全场适用。ZJI是原Wordpress圈知名主机商:维翔主机,成立于2011年,2018年9月启用新域名ZJI,提供中国香港、台湾、日本、美国独立服...

什么是关系型数据库为你推荐
css加载失败css 无法加载access数据库修复Access数据库恢复,有些表被损坏或有些表的部分记录被损坏,求解啊cisco2960思科的2950和2960;3560和3750的区别在哪?什么是支付宝支付宝是什么文档下载怎样把手机里的文件直接下载或复制到U盘里小型汽车网上自主编号申请请问各位大虾,如何在网上选车牌号?300051三五互联请问300051三五互联还会继续盘升吗?申请400电话电话是什么电话啊?怎么申请400电话400呢?具体收费价格是什么?kingcmsKingCMS 开始该则呢么设置呢?powerbydedecms如何去掉底部的 powered by dedecms
太原域名注册 美国主机论坛 paypal认证 softbank官网 win8升级win10正式版 免费静态空间 华为4核 宁波服务器 jsp空间 吉林铁通 网站在线扫描 免费私人服务器 drupal安装 视频服务器是什么 西安服务器托管 免费个人主页 摩尔庄园注册 时间服务器 alexa搜 godaddy域名 更多