《数据库理论与技术》复习题小妖版解析.docx
《《数据库理论与技术》复习题小妖版解析.docx》由会员分享,可在线阅读,更多相关《《数据库理论与技术》复习题小妖版解析.docx(29页珍藏版)》请在冰豆网上搜索。
![《数据库理论与技术》复习题小妖版解析.docx](https://file1.bdocx.com/fileroot1/2023-2/9/8bff5ae9-9029-44fc-8cbc-2345f7fb79e2/8bff5ae9-9029-44fc-8cbc-2345f7fb79e21.gif)
《数据库理论与技术》复习题小妖版解析
《数据库理论与技术》复习题-2008小妖版
1.考虑用二元联系(图1)对三元联系(图2)的表示:
图1
图1
图2
1)分别给出图1中E,A,B,C,RA,RB和RC的一个实例,这些实例不对应图2中A,B,C和R的任何实例;
2)更改图1中的ER图,引入适当的约束以确保满足约束的E,A,B,C,RA,RB和RC的任何实例都对应于A,B,C和R的一个实例;
3)更改以上的转化以表示在三元联系上的全参与约束;
解:
1)令E={e1,e2},A={a1,a2},B={b1},C={c1},RA={(e1,a1),(e2,a2)},Rb={(e1,b1)},Rc={(e1,c1)};
可以看出,由于元组(e2,a2)的原因,不存在任何实例对应于E,Ra,Rb,Rc
2)如下图所示:
通过引入E和关系Ra,Rb,Rc之间的全部参与的约束条件,以便在E中的每个元组都和A,B,C有关系。
3)假设A全部参与关系R,则在A和Ra之间引入全部参与约束
4)将E看作弱实体集,而将Ra,Rb,Rc看作标志联系集。
如下图所示
2.分别判断下列图中G1和G2是否互模拟(bisimulation),并说明理由
解:
(1)在图中标出各点的状态,我们构造关系S={(P0,Q0),(P1,Q1),(P2,Q1),(P3,Q2),(P4,Q3)}
可知G2可以模拟G1,下面我们讨论
S+1={(Q0,P0),(Q1,P1),(Q1,P2),(Q2,P3),(Q3,P4)}
是否可模拟,在G2中Q0有一个a变换可对应到G1中2个变换,即(Q1,P1)∈S-1,(Q1,P2)∈S-1。
但Q1有两个变换b,c,而在G1中公存在只有b或只有c的状态点,可知G1和G2不能互模拟。
(2)如图,标出各状态点,构造有关系
S={(P0,Q0),(P1,Q1),(P1,Q2),(P2,Q3),(P2,Q4),(P3,Q5)},
可知其中G1中的点均可由G2中的点模拟,下面我们考虑
S+1={(Q0,P0),(Q1,P1),(Q2,P1),(Q3,P2),(Q4,P2),(Q5,P3)},
可知同样其中G2中的点均可由G1中的点模拟,所以G1和G2互模拟。
3.什么是可恢复调度?
为什么要求调度的可恢复性?
存在要求允许出现不可恢复调度的情况吗?
说明理由。
答:
假设在一个调度中,Tj读取了Ti写入的数据,Ti在提交前发生故障,我们必须中止Tj以保证事务地原子性。
若Tj在Ti出现故障后是可中止的,那么我们就称该调度是可恢复调度。
可恢复调度应满足:
对于每个事务Ti和Tj,如果Tj读取了由Ti所写的数据项,则Ti先于Tj提交。
4.设关系r1(A,B,C),r2(C,D,E)有如下特性:
r1有200000个元组,r2有45000个元组,一块中可容纳25个r1元组或30个r2元组。
试估算以下每一种策略计算r1|><|r2所需存取的块数:
1)嵌套循环连接
2)块嵌套循环连接
3)归并连接
4)散列连接
解:
r1需要8000个块,r2需要1500个块。
假设有一个存储器有M页。
如果M>1500,那么使用平坦嵌套循环,通过1500+8000次磁盘存取就可以很容易的完成连接操作。
因此我们只考虑M<=1500的情况。
(a)嵌套循环连接:
使用r1作为外关系,我们需要进行200000×1500+8000=300,008,000次磁盘存取。
如果r2是外关系,那么我们需要45000×8000+1500=360001500次磁盘存取。
B.块嵌套循环连接:
如果r1是外关系,我们需要
×1500+8000次磁盘存取,如果r2是外关系,我们需要
×8000+1500次磁盘存取。
5.设关系r1(A,B,C),r2(C,D,E)和r3(E,F),其主码分别为A,C,E。
假设r1有1500个元组,r2有2500个元组,r3有1000个元组。
1)试估计r1|><|r2|><|r3的大小;
2)给出一个有效计算r1|><|r2|><|r3的策略
答:
1)因为连接具有结合律和交换性,所以不管我们怎样连接r1,r2和r3,最终连接r1,r2和r3得到的结果都是一样的。
因此,我们只考虑基于((r1
r2)
r3)连接策略下的大小。
因为C为r2的关键字,所以连接r1和r2产生至多包含1500个元组的关系。
同样,把前面得到的结果和r3进行连接,将产生至多包含1500个元组的关系,因为E为r3的关键字。
因此,最终关系最多包含有1500个元组。
2)计算这个连接的一个有效的策略是为关系r2上的属性C和关系r3上的属性E创建索引。
然后对于r1中的每个元组,我们按照下面锝方法作:
A.使用在C上创建的索引,在r2中查找最多一个元组,这个元组与r1中的C匹配。
B.使用在E上创建的索引,在r3中查找最多一个元组,这个元组与r2中的E值匹配。
6.设一个嵌入式SQL应用程序中80%的时间花在运行SQL代码上,20%的时间花在运行主语言代码上。
如果只对SQL代码实施了并行,那么可以期望得到多大的加速比?
说明理由。
答:
由于不能被并行话的部分占总运行时间的20%,所以可获得的加速比最多不会超过5。
7.假设一个系统运行三种类型的事务:
A类事务以50/s的速度运行,B类事务以100/s的速度运行,C类事务以200/s的速度运行。
假设系统所处理的事务中A、B、C三类事务所占比例分别为30%,30%,40%。
1)如果A、B、C三类事务之间互不干扰,系统的平均事务吞吐量是多少?
1)什么因素会使不同类型事务之间产生相互干扰,导致计算出的平均事务吞吐量不准确?
2)如果不同类型事务之间相互干扰的因素非常复杂,那么用什么方法可以得到比较准确的平均事务吞吐量?
答:
1)
2)引起事务之间干扰的最重要的原因之一是封锁竞争。
在前面的例子中,假设事务A和事务B都是更新事务,而事务C是查询事务。
由于处理器和磁盘之间的速度不匹配,很可能会出现下面的情况:
A类型的一个事务持有一个“热”数据项的锁,并且在等待将其写道磁盘中来完成操作,在在这个时候B类或C类一个事务正在等待事务A持有的封锁。
在这种情况下,一些CPU循环就被浪费了。
因此,观察到的事物吞吐量会比计算出来的吞吐量要小。
相反,如果A类型的事务和B类型的事务是大量消耗磁盘资源的事务,而C类型事务时大量消耗CPU资源的事务,那么观察到的事物吞吐量将会比计算到吞吐量大。
封锁竞争也会导致死锁,在这种情况下一些事务将不得不被终止。
事务的终止和重启将会导致观察到的吞吐量比计算出来的吞吐量要小。
数据结构大小的限制,事务管理器事务记录函数花费时间的变化情况等因素都会导致观察到的吞吐量和计算出来的吞吐量之间的不同。
3)如果不同类型事务之间的相互干扰因素非常复杂,那么我们可以采用性能模拟的办法对系统得吞吐量进行测试。
首先需要建立模型,然后再模型上进行各种实验,可以通过改变不同的实验环境来估算出系统得平均吞吐量。
8.对于下列每一种任务,哪一种并行形式(查询间并行、操作间并行、操作内并行)可能是最关键的?
说明理由。
1)提高一个执行许多小的查询的系统吞吐量;
2)在磁盘和处理器数目都很大的情况下,提高一个执行少量大的查询的系统吞吐量;
答:
查询间并行指的是:
不同的查询或不同的事务彼此并行地执行。
操作内并行指的是:
我们可以通过并行的执行每一个运算,如排序,选择,投影,连接等,来加速一个查询速度。
操作间并行指的是:
我们可以通过并行地执行每一个查询表达式中地多个不同的运算,来加快一个查询的处理速度。
通过上面的介绍,我们可以知道,对于a查询间并行;对于b,操作内并行。
9.给定如下数据图(DataGraph):
试分别给出其DataGuide图和1-Iindex索引图
如图:
DataGuide图
PS:
此图为我自己画的,不知道是否正确,有懂行的麻烦看看!
10.FortheDTD,XML,andXQUERYgivenbelow,answerthequestionslistednext.
TheDocumentTypeDefinitionmyfriend.dtd:
ELEMENTmyfriends(person*)>
ELEMENTperson(id,name?
cell-phone*,children?
)>
ELEMENTchildren(child*)>
ELEMENTchild(name,toys*)>
ELEMENTname(#PCDATA)>
ELEMENTtoys(#PCDATA)>
ELEMENTid(#PCDATA)>...]
ELEMENTemployees(emp*)>
ELEMENTemp(id,work-phone,(contact|address)>
ELEMENTaddress(city,zip,street)>
ELEMENTid(#PCDATA)>]
ELEMENTcontact(#PCDATA)>...]
TheXMLDocumentfriends.xml:
1
``jack''
2222
2
3333
c1
c2t1
c2...
TheXMLDocumentemployees.xml:
1
9999
``me''
2
8888
czsTheXQUERYexpression:
FOR$outerin(friends.xml)//person,
LET$child:
=$outer/children
WHERE($outer/cellphone>2000)
RETURN
$outer/id
FOR$innerIN(employees.xml)/employees/emp[id=$outer/id]
RETURN
{
$outer/cellphone
$child/child
$inner/workphone
$inner/address/city
}
1)ListtheXMLoutputthattheXQUERYexpressionwouldgeneratewhen
appliedtothegivenXMLinputdocuments.
2)DesignarelationalschematostorethetwogivenXMLdatafiles.
3)ListtheSQLquerythatyouwouldgeneratetoexecutethegivenXQUERY
expressiononyourrelationaldatabase.Statewhatfinalcomputationswould
remaintobedonebytheXQUERYprocessorbeyondexecutingyourSQL
statement,ifany.
解:
1)
1
2222
9999
2
3333
c1
c2t1
c2
8888
c
2)person(pid,cellphone,name)
child(cid,parentid,name)
toy(tid,cid,toy_name)
emp(pid,workphone,contact,city,zip,street)
3)person(pid,name,cellphoneSetMultiSet(cellphones),ChildSetMultiSet(children))
cellphones(cellphone)
children(name,toySetMultiSet(toys))
toys(toyname)
emp(pid,workphone,contact,city,zip,street)
4)selectperson.cellphone,
array(selectchild.namechild.toyformchild
wherechild.parentid=person.pid)aschild_array,
emp.workphone,emp.city
fromperson,child,emp
whereperson.pid=emp.pidANDperson.cellphone>2000
11.Supposeyouhavetorepresenttheinformationaboutparts.Eachparthasaname(unique),andatextualdescription.Partsmaybesimpleorcomplex.Asimpleparthasacolorbutnochildrensubparts.Acomplexparthasanumberofchildrensubparts(whichcanbesimpleorcomplex),eachofwhichmayberepeated.(E.g.,acarhas4wheels.)Youcanassumethateachpartcanbeachildsubpartofatmostoneotherpart(soeachpart,togetherwithitssubparts,canbeviewedasatree).Donotassumeanyfixednumberoflevelsofpartcomposition.
1)DefinetheschemaofXMLdocumentscontainingpartinformationusingDTDs.
2)GiveanexampleofadocumentinstancewhichisvalidundertheDTDs.
3)WritethefollowingqueriesinXQuery:
(a)findthenamesofalltheyellowparts.
(b)findallthepartsthathaveatleast5distinctchildrensubparts.
(c)findallthepartscontainingadescendantsubpartnamed“spoke"andnotcontainingadescendantsubpartnamed“tire".
ANSWER:
1)
DOCTYPEParts[
ELEMENTParts(part)+>
ELEMENTPart(description,subpartinfo*|color))>
ATTLISTPart
nameID#REQUIRED>
ELEMENTsubpartinfo(part)>
ATTLISTsubpartinfo
nameID#REQUIRED>
ELEMENTqty(#PCDATA)>
ELEMENTname(#PCDATA)>
]>
2)
silver
1
silver
40
black
1
2
black
2
black
3
yellow
1
3)
(a)for$pin//part
where$p[color=”yellow”]
return$p/@name
(b)for$pin//part
wherecount($p/subpartinfo)>=5
return$p
(c)for$pin//part
Where($p//name=”sopke”)and(not($p//name=”tire”))
Return$p
12.ConsidertherelationPARTS,whichhasPart#ashashkeyandwhichincludesrecordswiththefollowingPart#values:
2369,3760,5046,4871,5659,2222,1821,1074,7115,1620,2428,3943,4750,3157,6975,4981,9208.Thehashfunctionuses8buckets,numbered0to7.Eachbucketisonediskblockandholdstworecords.
1)Loadtheserecordsintothefileinthegivenorderusingthehashfunctionh1(K)=Kmod8.CalculatetheaveragenumberofblockaccessesforarandomretrievalonPart#.
2)Nowloadtherecordsintoexpandablehashfilesbasedonlinearhashing.Startwithasinglediskblock,usingthehashfunctionh2(K)=Kmod2,andshowhowthefilegrowsandhowthehashfunctionschangeastherecordsareinserted.Assumethatblocksaresplitwheneveranoverflowoccurs,andshowthevalueofnateachstage.
解:
1)
平均查找代价:
(8+6*2+3+3+3)/17=1.71
2)
13.Considerahash-joinoftworelationsRandShavingB(R)=1000andB(S)=500.ThevaluesinRandSareskewedsuchthatthehashfunctionassignsthreetimesasmanytuplestoeven-numberedhashbucketsastoodd-numberedbuckets.
1)Howmuchmemorywouldberequiredtoperformthejoinintwopasses?
2)Whatistheperformanceofthehash-joingiventheskewedhashing?
3)Howwouldtheperformanceofusingthehash-joincomparetousingasorted-mergealgorithm?
4)解:
5)1。
散列连接要用两趟完成,则需要递归划分,对关系s的划分所需趟数估计为
,所以有
,M=8.9。
6)对关系