《数据库理论与技术》复习题-2008小妖版1. 考虑用二元联系(图1)对三元联系(图2)的表示:图1图21) 分别给出图1中E ,A ,B ,C ,R A ,R B 和R C 的一个实例,这些实例不对应图2中A ,B ,C 和R 的任何实例;2) 更改图1中的ER 图,引入适当的约束以确保满足约束的E ,A ,B ,C ,R A ,R B 和RC 的任何实例都对应于A ,B ,C 和R 的一个实例; 3) 更改以上的转化以表示在三元联系上的全参与约束;解:1) 令 E = {e 1, e 2}, A = {a 1, a 2}, B = {b 1}, C = {c 1}, R A = {(e 1, a 1), (e 2,a 2)},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)}abc ab cc G 1 G 2dd daa abccb G 1=G 2=是否可模拟,在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有200 000个元组,r2有45 000个元组,一块中可容纳25个r1元组或30个r2元组。
试估算以下每一种策略计算r1|><|r2所需存取的块数:1) 嵌套循环连接 2) 块嵌套循环连接 3) 归并连接 4) 散列连接解:r1需要8000个块,r2需要1500个块。
假设有一个存储器有M 页。
如果M>1500,那么使用平坦嵌套循环,通过1500+8000次磁盘存取就可以很容易的完成连接操作。
因此我们只考虑M<=1500的情况。
(a) 嵌套循环连接:使用r1作为外关系,我们需要进行200 000×1500+8000=300,008,000次磁盘存取。
如果r2是外关系,那么我们需要45 000×8 000+1 500=360 001 500次磁盘存取。
B . 块嵌套循环连接:如果r1是外关系,我们需要8000/(M 2)-⎡⎤⎢⎥×1500+8000次磁盘存取,如果r2是外关系,我们需要1500/(M-2)⎡⎤⎢⎥×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)91200%40*100%30*50%30*=++n n n n2)引起事务之间干扰的最重要的原因之一是封锁竞争。
在前面的例子中,假设事务A和事务B 都是更新事务,而事务C 是查询事务。
由于处理器和磁盘之间的速度不匹配,很可能会出现下面的情况:A 类型的一个事务持有一个“热”数据项的锁,并且在等待将其写道磁盘中来完成操作,在在这个时候B 类或C 类一个事务正在等待事务A 持有的封锁。
在这种情况下,一些CPU 循环就被浪费了。
因此,观察到的事物吞吐量会比计算出来的吞吐量要小。
相反,如果A 类型的事务和B 类型的事务是大量消耗磁盘资源的事务,而C 类型事务时大量消耗CPU 资源的事务,那么观察到的事物吞吐量将会比计算到吞吐量大。
封锁竞争也会导致死锁,在这种情况下一些事务将不得不被终止。
事务的终止和重启将会导致观察到的吞吐量比计算出来的吞吐量要小。
数据结构大小的限制,事务管理器事务记录函数花费时间的变化情况等因素都会导致观察到的吞吐量和计算出来的吞吐量之间的不同。
3)如果不同类型事务之间的相互干扰因素非常复杂,那么我们可以采用性能模拟的办法对系统得吞吐量进行测试。
首先需要建立模型,然后再模型上进行各种实验,可以通过改变不同的实验环境来估算出系统得平均吞吐量。
8.对于下列每一种任务,哪一种并行形式(查询间并行、操作间并行、操作内并行)可能是最关键的?说明理由。
1)提高一个执行许多小的查询的系统吞吐量;2)在磁盘和处理器数目都很大的情况下,提高一个执行少量大的查询的系统吞吐量;答:查询间并行指的是:不同的查询或不同的事务彼此并行地执行。
操作内并行指的是:我们可以通过并行的执行每一个运算,如排序,选择,投影,连接等,来加速一个查询速度。
操作间并行指的是:我们可以通过并行地执行每一个查询表达式中地多个不同的运算,来加快一个查询的处理速度。
通过上面的介绍,我们可以知道,对于a查询间并行;对于b,操作内并行。
9.给定如下数据图(Data Graph):试分别给出其DataGuide 图和1-Iindex索引图如图:PS:此图为我自己画的,不知道是否正确,有懂行的麻烦看看!10.For the DTD, XML, and XQUERY given below, answer the questions listednext.The Document Type Definition myfriend.dtd:< !ELEMENT myfriends (person*)>< !ELEMENT person (id, name?, cell-phone*, children?)>< !ELEMENT children (child*)>< !ELEMENT child (name,toys*)>< !ELEMENT name ( #PCDATA)>< !ELEMENT toys ( #PCDATA)>< !ELEMENT id ( #PCDATA)> ... ]< !ELEMENT employees (emp*)>< !ELEMENT emp (id, work-phone, (contact|address)>< !ELEMENT address (city,zip,street)>< !ELEMENT id ( #PCDATA)>]< !ELEMENT contact ( #PCDATA)> ... ]The XML Document friends.xml:<myfriends><person><id> 1 </id><name> ``jack'' </name><cellphone> 2222 </cellphone></person><person><id> 2 </id><cellphone> 3333 </cellphone><children> <child><name> c1 </name> </child><children> <child><name> c2 </name> <toys> t1 </toys> </child> <child> <name> c2 </name> </child> ... </children></person></myfriends>The XML Document employees.xml:<employees><emp><id> 1 </id><workphone> 9999 </workphone><contact> ``me'' </contact></emp><emp><id> 2 </id><workphone> 8888 </workphone><address> <city> c </city> <zip> z </zip> <street> s </street> </address> </emp></employees>The XQUERY expression:<contact-info>FOR $outer in (friends.xml)//person,LET $child := $outer/childrenWHERE ($outer/cellphone > 2000 )RETURN$outer/idFOR $inner IN (employees.xml)/employees/emp[id=$outer/id]RETURN{<contact>$outer/cellphone$child/child$inner/workphone$inner/address/city</contact>}</contact-info>1) List the XML output that the XQUERY expression would generate whenapplied to the given XML input documents.2) Design a relational schema to store the two given XML data files.3) List the SQL query that you would generate to execute the given XQUERYexpression on your relational database. State what final computations would remain to be done by the XQUERY processor beyond executing your SQLstatement, if any.解:1) <contact-info><id> 1 </id><contact><cellphone> 2222 </cellphone><workphone>9999</workphone></contact><id> 2 </id><contact><cellphone> 3333 </cellphone><child><name> c1 </name> </child><child><name> c2 </name> <toys> t1 </toys> </child><child> <name> c2 </name> </child><workphone>8888</workphone><city>c</city></contact></contact-info>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, cellphoneSet MultiSet(cellphones), ChildSet MultiSet(children))cellphones(cellphone)children(name, toySet MultiSet(toys))toys(toyname)emp(pid, workphone, contact, city, zip, street)4) select person.cellphone,array( select child.toy form childwhere child.parentid=person.pid) as child_array,emp.workphone, emp.cityfrom person, child, empwhere person.pid=emp.pid AND person.cellphone>200011.Suppose you have to represent the information about parts. Each part has a name(unique),and a textual description. Parts may be simple or complex. A simple part has a color but no children subparts. A complex part has a number of children subparts (which can be simple or complex), each of which may be repeated. (E.g.,a car has 4 wheels.) You can assume that each part can be a child subpart of atmost one other part (so each part, together with its subparts, can be viewed as a tree). Do not assume any fixed number of levels of part composition.1)Define the schema of XML documents containing part information usingDTDs.2)Give an example of a document instance which is valid under the DTDs.3)Write the following queries in XQuery:(a)f ind the names of all the yellow parts.(b)f ind all the parts that have at least 5 distinct children subparts.(c)f ind all the parts containing a descendant su bpart named “spoke"and not con taining a descendant subpart named “tire".ANSWER:1)<!DOCTYPE Parts[<!ELEMENT Parts(part)+><!ELEMENT Part(description, subpartinfo*|color))><!ATTLIST Partname ID #REQUIRED><!ELEMENT subpartinfo(part)><!ATTLIST subpartinfoname ID #REQUIRED><!ELEMENT qty (#PCDATA)><!ELEMENT name (#PCDATA)>]>2) <parts><part name=”bicycle”><subpartinfo><part name=”wheel”><subpartinfo><part name=”rim”><color>silver</color></part><qty> 1 </qty></subpartinfo><subpartinfo><part name=”spokes”><color>silver</color></part><qty> 40 </qty></subpartinfo><subpartinfo><part name=”tire”><color>black</color></part><qty> 1 </qty></subpartinfo></part><qty> 2 </qty></subpartinfo><subpartinfo><part name=”brake”><color>black</color></part><qty> 2 </qty></subpartinfo><subpartinfo><part name=”gear”><color>black</color></part><qty> 3 </qty></subpartinfo><subpartinfo><part name=”frame”><color>yellow</color></part><qty> 1 </qty></subpartinfo></part></parts>3)(a) for $p in //partwhere $p[color=”yellow”]return $p/@name(b) for $p in //partwhere count($p/subpartinfo)>=5return $p(c) for $p in //partWhere ($p//name=”sopke”)and(not($p//name=”tire”))Return $p12.Consider the relation PARTS, which has Part# as hash key and which includesrecords with the following Part# values: 2369, 3760, 5046, 4871, 5659, 2222, 1821, 1074, 7115, 1620, 2428, 3943, 4750, 3157, 6975, 4981, 9208. The hash function uses 8 buckets, numbered 0 to 7. Each bucket is one disk block and holds two records.1)Load these records into the file in the given order using the hash functionh1(K)=K mod 8. Calculate the average number of block accesses for a random retrieval on Part#.2)Now load the records into expandable hash files based on linear hashing. Startwith a single disk block, using the hash function h2(K)= K mod 2, and showhow the file grows and how the hash functions change as the records areinserted. Assume that blocks are split whenever an overflow occurs, and show the value of n at each stage.解:1)平均查找代价:(8+6*2+3+3+3)/ 17=1.712)13. Consider a hash-join of two relations R and S having B(R) = 1000 and B(S) =500. The values in R and S are skewed such that the hash function assigns three times as many tuples to even-numbered hash buckets as to odd-numbered buckets.1) How much memory would be required to perform the join in two passes? 2) What is the performance of the hash-join given the skewed hashing? 3) How would the performance of using the hash-join compare to using a sorted-merge algorithm?4) 解: 5) 1。