您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据结构与算法 > 数据库系统基础教程(4-5)_2
第四章其它数据模型•其它数据模型:–层次模型和网状模型–ODL模型–对象关系模型第五章关系代数•主要解决问题:–在关系模式设计已确定的前题下,在这些关系上可进行哪些运算?得到怎样的新关系?–关系操作有两种不同的表示方式:代数的和逻辑的。–关系代数不仅可以表示运算,也可表示对数据库的约束。–关系操作可在无重复元组的集合set上运算,也能在有重复元组的包bag上运算。5.1本章使用的数据库模式•Movie(title,year,length,inColor,studioName,producerC#)•StarsIn(movieTitle,Movieyear,starName)•MovieStar(name,address,gender,birthdate)•MovieExec(name,address,cert#,netWorth)•Studio(name,address,presC#)5.2关系代数•关系代数RelationalAlgebra:–在关系模型上定义的一组标准运算,可由已知的关系计算得到新的关系。–注意:结果关系的属性是什么?结果关系中的元组是什么?各种运算的特征。5.2.1关系代数基础•关系代数中的运算(四大类共九种):1)一般集合运算:并、交、差(在两个相同模式的关系上进行)2)删减运算:在一个关系上进行投影:删去某些属性(列)选择:删去某些元组(行)3)合并运算:在两个关系之间进行笛卡尔积:两个关系中所有元组的所有可能的组合(无条件)。连接:两个关系中的元组有条件的组合。–自然连接笛卡尔积加投影和选择运算–θ连接笛卡尔积加选择运算4)改名:在一个关系上进行,改变关系或属性的名字,而不影响其中元组。5.2.2集合运算•对于两个关系R和S,存在的集合运算:–R∪S:并,由R或S中的元组构成的集合。注意同一元组只出现一次。–R∩S:交,由属于R且属于S的元组构成的集合。–R—S:差,由属于R且不属于S的元组构成的集合。注意:前两者可交换,差运算不能交换。•集合运算所需的条件:–R和S的模式具有相同的属性集;–R和S应具有相同的属性次序。5.2.2集合运算ABa1a1b1b2ABa1a1a2b1b2b1ABa1b2例如:设有关系R与S如右表:则其集合运算的结果如下。ABa2a1b1b2ABa1b1RSR∪SR∩SR-S5.2.3投影•投影运算:–对于一个关系R,投影产生一个新关系,只包含R属性集的一个子集。–表示为:∏A1,A2,…,An(R)–结果属性为{A1,A2,…,An}–结果元组由R中元组在属性{A1,A2,…,An}上的分量构成,元组不重复。–关系分解时使用。5.2.3投影titleyearlengthinColorstudioNameProducerC#StarWarsMightyDucksWaynes’sWorld19771991199212410495TrueTrueTrueFoxDisneyParamount123456789099999titleyearlengthStarWarsMightyDucksWaynes’sWorld19771991199212410495inColorTrue例:Movie∏title,year,length(Movie)结果如下∏inColor(Movie)结果如下5.2.4选择•选择运算:–对于一个关系R,选择产生一个新关系,只包含满足特定条件的元组。–表示为:бc(R),其中c是结果关系中每个元组都要满足的条件。–结果属性:保持R属性集且属性次序也相同。–结果元组:R中满足条件c的元组。•条件的表示:–运算对象:属性名和常量–算术比较运算:=≠>≥<≤–逻辑运算:NOTANDOR5.2.4选择TitleyearlengthinColorstudioNameProducerC#StarWarsMightyDucks19771991124104TrueTrueFoxDisney1234567890TitleyearlengthinColorstudioNameProducerC#StarWars1977124TrueFox12345例:бlength≥100(Movie)结果如下бlength≥100ANDstudioName=‘FOX’(Movie)结果如下5.2.5笛卡儿积•笛卡儿积运算:–对于关系R和S,笛卡尔积表示为:R×S。–结果属性:属性集是R和S属性集合的并集。–区别R和S中的同名公共属性:“关系名.属性名”。–结果元组:是R中的每个元组与S中每个元组的组合。–元组数量是NR×NS。5.2.5笛卡儿积AB1324BCD24957106811AR.BS.BCD1113332224442492495710571068116811RSR×S例:5.2.6自然连接•自然连接运算:–对于两个关系R和S,自然连接表示为RS(R∞S也可)–结果属性:是R和S中的属性的并集,去掉同名的公共属性。–结果元组:是R和S在同名公共属性上一致的元组的组合。–确切说,设A1,A2,…,An是R和S的公共属性,当且仅当R的元组r与S的元组s在A1,A2,…,An上都一致时,元组s和r组合成为RS的一个元组,称为一个连接元组。5.2.6自然连接AB1324BCD24957106811RS例:RSABCD13245768注意:若R和S没有同名的公共属性,则自然连接是无效运算(并非空元组)。自然连接用于将两个关系连接合并为一个关系。5.2.6自然连接BCD2273384510UV例:UVABC169277388ABCD116922773388451010若R中元组与S中任何元组均不匹配,则在RS中没有该元组出现,这种元组称为悬挂元组。5.2.6自然连接例:设有关系:学生(学号,姓名,班级)选修(学号,课号,成绩)要求查询学生’张平’的各科成绩。б姓名=’张平’(学生选修)或б姓名=’张平’(学生)选修5.2.7θ连接•θ连接运算:–在笛卡尔积的基础上,增加条件以限制元组。–对于两个关系R和S,基于条件c的θ连接表示为RcS,计算步骤:1.计算R×S,即笛卡尔积;2.用条件c做选择运算:бc(R×S)。5.2.7θ连接BCD2273384510UV例:UADVABC169277388AU.BU.CV.BV.CD1116922277333882277733888451010105.2.8复合运算(组合操作)•由于关系运算的结果仍为关系,因而可对之作进一步的关系运算。•复合运算:把两种以上运算组合起来成为一个表达式,以完成较复杂的计算。•当单一运算不能满足要求时,需要复合运算。•组合关系表达式时用括号表示计算优先级。5.2.8复合运算例1Movie(title,year,length,inColor,studioName)计算“Fox制造的至少100分钟长的影片的片名及其年份”∏title,year(σlength≥100ANDstudioName=‘FOX’(Movie))另一种等价计算:∏title,year(σlength≥100(Movie)∩σstudioName=‘FOX’(Movie))注意:完成相同的计算可能有多种方式。例2Movie(title,year,length,inColor,studioName)StarsIn(title,year,starName)求“主演过影片至少100分钟长的影星的名字”。∏starName(σlength≥100(MovieStarsIn))你能给出另一种等价计算吗?5.2.8复合运算•可以用表达式树(或称查询树)来表示上述计算,例如:∏title,year(σlength≥100(Movie)∩σstudioName=‘FOX’(Movie))∏title,year∩бlength≥100бstudioName=‘FOX’MovieMovie5.2.9改名•改名运算:–把一个关系R改名为关系S,且属性也按次序改名为A1A2…An,表示为ρS(A1,A2,…,An)(R)–若仅关系改名为S而属性不改名,则表示为ρS(R)–注意:改名运算产生一个命名的新关系,并不改变原有关系的名称、结构与内容5.2.9改名AB1324BCD24957106811RSAR.BS.BCD1113332224442492495710571068116811R×SR×ρS(X,C,D)(S)ABXCD1113332224442492495710571068116811例:另一种等价计算:ρRS(A,B,X,C,D)(R×S)5.2.9改名例:销售员Salesman(empid,idno,name,gender,phone,deptid)求“所有重名的销售员的员工号及其姓名”∏s1.empid,s1.name(ρS1(Salesman)s1.name=s2.nameANDs1.empid≠s2.empidρS2(Salesman))5.2.10基本运算和派生运算•上述九种运算并非独立:–R∩S=R—(R—S)–θ连接:RcS=σc(R×S)–自然连接:RS=πL(σc(R×S))•其中:设A1A2…An是R和S的同名公共属性;C为R.A1=S.A1ANDR.A2=S.A2AND…ANDR.An=S.An;L为R和S属性集合的并集,只保留一个同名公共属性。–所以这三种运算为派生运算,可从其它运算中导出,其它六种运算为基本运算。练习Customer(custid,name,prov,city,phone,unit)Product(prodid,factory,type,spec,price,desc)Salesman(empid,idno,name,gender,phone,deptid)Department(deptid,name,headerid)Salesorder(orderno,signdate,empid,custid)Salesitem(orderno,lineno,prodid,singlecost,quantity)1.计算名为“张三”的销售员的员工号及其电话号码。2.计算员工号为“A0043”的销售员所经办的客户的姓名及其电话号码。3.计算员工号为“A0043”的销售员所销售的商品的种类和规格。
本文标题:数据库系统基础教程(4-5)_2
链接地址:https://www.777doc.com/doc-3205494 .html