高级数据库系统作业答疑

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

高级数据库系统作业答疑2007.1第一次作业•已知有如下两种段分配:AR1在Site1,R2在Site2,R3在Site3.BR1和R2在Site1,R2和R3在Site3.另已知有如下应用(所有应用的频率相同)A1:在Site1上发出,读5个R1记录,5个R2记录A2:在Site3上发出,读5个R3记录,5个R2记录A3:在Site2上发出,读10个R2记录.问:1.如果以本地应用为主要设计目标,那个分配较优?2.假定A3改为要修改10个R2记录,并仍以本地应用为其设计目标,则那个分配方案较优?第一次作业•解:首先完善模型如下:假定:B方案中Site1上的R2和Site3上的R2是完全相同的,即冗余;本地读写的代价可忽略不计;所有异地读操作的单位记录代价均相等,记为1;所有异地写操作的单位记录代价均相等,记为1。1A方案B方案2A方案B方案A1代价5050A2代价5050A3代价010010+10+10故可知,第1个问题,A、B两种分配方案代价相等。第2个问题,A分配方案较优。第二次作业习题:假定全局关系和分段模式如下:全局关系Doctor(D#,Name,Dept)Patient(P#,Name,Dept,Treat,D#)Care(P#,Drug,QTY)分段模式Doctor1=SLDEPT=‘Surgery’(Doctor)Doctor2=SLDEPT=‘Pediatrics’(Doctor)Doctor3=SLDEPT‘Surgery’andDEPT‘Pediatrics’(Doctor)Patient1=SLDEPT=‘Surgery’andtreat=‘intensing’(Patient)Patient2=SLDEPT=‘Surgery’andtreat‘intensing’(Patient)Patient3=SLDEPT‘Surgery’(Patient)Care1=CareSJp#=p#Patient1Care2=CareSJp#=p#Patient2Care3=CareSJp#=p#Patient3使用变换准则,将下面的全局查询变化为分段查询,并对它们加以简化。当需要时用限定关系代数消除查询中不用的段。(a)列出在Care中使用‘Aspirin’的Patient名字;(b)列出给病人开出接受精细护理的医生名字。第二次作业..''.''PatientNameCareDrugAspirinPatientDEPTSurgeryPatientCare(a)SLDrug=’Aspirin’^Patient.DEPT=’Surgery’PJpatient.nameJNP#=P#PatientCare第二次作业(a)UNJNP#=P#Patient1Care1SLDrug=’Aspirin’^Patient.DEPT=’Surgery’PJpatient.nameJNP#=P#Patient2Care2JNP#=P#Patient3Care3第二次作业UNJNP#=P#PJpatient.namePJP#,namePJP#Patient1SLDrug=’Aspirin’Care1PJpatient.nameJNP#=P#PJP#,namePJP#Patient2SLDrug=’Aspirin’Care2(a)第二次作业UNJND#=D#PJnamePJD#,namePJD#D1SLtreat=’intensing’P1JND#=D#PJnamePJD#,namePJD#D3SLtreat=’intensing’P3JND#=D#PJnamePJD#,nameD2..''.#.#DoctorNamePatientTreatIntensingDoctorDPatientDDoctorPatient(b)第三次作业•对R的另一个简化程序:•R’=RSJS,T’=TSJR’,S’=SSJT’•计算到R不再变化为止第三次作业•在如下R,S的概貌上计算RJNA=BSSize(R)=50,Card(R)=100,Val(A[R])=50,Size(A)=3Size(S)=5,Card(S)=50,Val(B[S])=50,Size(B)=3RSJA=BS的选择度ρ=0.2SSJA=BR的选择度ρ=0.8问:1.使用SJ简化程序在R得站点执行JN2.使用SJ简化程序在S得站点执行JN3.使用直接连接在R站点执行JN4.使用直接连接在S站点执行JN那种方案较优?第三次作业•解:1.COST1=2C0+C1(Size(A)·Val(A[R])+Size(S)·Card(S)·ρSSJR)=2C0+C1(3·50+5·50·0.8)=2C0+350C12.COST2=2C0+C1(Size(B)·Val(B[S])+Size(R)·Card(R)·ρRSJS)=2C0+C1(3·50+50·100·0.2)=2C0+1150C13.COST3=C0+C1·Size(S)·Card(S)=C0+C1·5·50=C0+250C14.COST4=C0+C1·Size(R)·Card(R)=C0+C1·50·100=C0+5000C1所以第三种方案最优。第四次作业•7.2解:第三句有问题,左边为string类型,右边是City类型。cityOfLA.name:=cityOfLA.mayor.spouse.livesIn;•7.4解:前一种的输出结果为:DonaldDuckMickeyMouse后一种的输出结果为:6060因为前一种是引用语义,而后一种是复制语义。第四次作业•7.7解:引用:someMaterial:=id88;隐式引用:myCuboid.mat:=someMaterial;someMaterial.create;重引用:w:=myCuboid.mat.specWeight;隐式重引用:anotherMaterial:=myCuboid.mat;myCuboid.mat.create;第四次作业•7.9解:(1)(2)执行完毕后,mary.chilaren=joe.children={littleJoe}……Children:=id5joeid1Person……Children:=id5marryid2Personid8id5PersonSet……ChildrenlittleJoeid8Person第四次作业(3)(4)执行完毕后,betty.children={jimbo}jim.children={}……Children:={}jimid3Person’……Children:={id6}bettyid4Person’……Childrenjimboid6Person’第五次作业•8.8persistenttypeCuboidispubliclength,width,height,surface,volume,weight,translate,scale,rotate,certer,diagonal,minDistance;body[v1,v2,v3,v4,v5,v6,v7,v8:Vetex;mat:Material;value:float;]operations…declaresurface:float;declarescale:VertexvoidcodescaleCuboid;declarecenter:Vertex;declarediagonal:float;declareminDistance:VertexfloatcodeminDistanceCode;…第五次作业•implementation…definesurfaceisreturn2.0*(self.length*self.width+self.length*self.height+self.width*self.height);definescaleCuboid(s)isbeginself.v1.scale(s);…self.v8.scale(s);enddefinescaleCuboid;第五次作业definecenterisvarc:Vertex;beginc.create;c.x=0.5*(self.v1.x+self.v7.x);c.y=0.5*(self.v1.y+self.v7.y);c.z=0.5*(self.v1.z+self.v7.z);returnc;enddefinecerter;definediagonalisreturnself.v1.distance(self.v7);第五次作业defineminDistanceCode(v)isvarv0;begin//将长方体的6个面无限延伸,可将整个空间分为27个区域if(v在长方体内部或表面上)return0;elsebegin根据v所在区域,可简单判断出长方体上距v最近的点v0所在的面/棱/顶点,进而求出v0;returnv.distance(v0);endelseenddeineminDistanceCode;…endtypeCuboid;第五次作业•9.1答:(1)方法一采用1:1关系表示1:N关系,存在较多冗余;不考虑索引,已知left查询对应的right集时,方法二效果明显好于方法一;已知right查询对应的left时,方法一效果好于方法二。当插入新关系L,R时,两种方法都无法保证一致性,即原关系1:N的语义约束可能被违反,需要对insert操作做修改,保证每一个Tright实例仅有至多一个对应的Tleft实例。删除关系L,R时,方法一中直接删除对应的TR实例,方法二中只需修改right集合,直到right集合为空时,才需要删除对应的TR实例。更新操作由插入删除操作组合而成,不再讨论。(2)方法一、二的insert操作均需修改,以保证一致性,方法二的delete操作也需要修改。修改思想上边已说明,具体算法不再给出。第六次作业•10.5解:declareconnect:Pipe||Pipevoid;refineconnect:ConicalPipe||ConicalPipevoid;一个合法的重定义要求:操作名不变,参数个数不变;操作的接收者类型是原操作中接收者类型的子类;操作的返回值类型是原操作返回值的子类;操作的参数类型是原操作参数类型的超类。题中的重定义仅满足(1)(2)(3),但违反(4)。ConicalPipe是Pipe的子类而非超类,故不合法。考虑下面的程序段:varaPipe,anotherPipe:Pipe;aConicalPipe:ConicalPipe;anotherPipe:=aConicalPipe;//可替换性,合法anotherPipe.connect(aPipe);//编译通过,执行时由于动态绑定,出错第六次作业•10.6解:继承属性的类型是不能重定义的,必须保持原类型。(1)子类中继承属性的类型不能是该类型的子类,即特化不合法。特化举例:typePersonisbody[name:string;age:int;]…typeEmployeesupertypePersonisbody[boss:Employee;]…typeManagersupertypeEmployeeisbody[refineboss:Manager;]…第六次作业程序段:varanEmp:Employee;aMgr:Manager;aMgr.boss:=anEmp;//语法错误anEmp.boss:=aMgr;//可替换性,合法anEmp.boss.boss:=anEmp;//语法检查合法,但有潜在问题(2)子类中继承属性的类型不能是该类型的超类,即泛化不合法。Person和Employee的类型定义同上,Manager类型定义如下:typeManagersupertypeEmployeeisbody[refineboss:Person;]…程序段:varaPerson:Person;anEmp:Em

1 / 47
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功