数据库作业及答案.doc
- 文档编号:144660
- 上传时间:2022-10-04
- 格式:DOC
- 页数:16
- 大小:94.50KB
数据库作业及答案.doc
《数据库作业及答案.doc》由会员分享,可在线阅读,更多相关《数据库作业及答案.doc(16页珍藏版)》请在冰豆网上搜索。
作业及参考答案
1.1关系模型:
1.试述数据库系统的组成和DBA的职责.
答:
组成:
数据库、数据库管理系统、应用系统、数据库管理员、用户。
DBA负责全面管理和控制数据库系统,主要职责:
设计和定义数据库系统
帮助用户使用数据库系统
监督与控制数据库系统的使用和运行
改进和重组数据库,调优数据库性能
转储与恢复数据库
重构数据库
2.a)找出下面表的三个候选键.
A
B
C
D
a1
b1
c1
D1
a2
b3
c1
D2
a3
b4
c2
D2
a4
b2
c2
D1
答:
三个候选键:
A,B,(C,D)
b)给出一个四行四列的表,要求只有一个由前三列组成的候选键.
答:
A
B
C
D
a1
b1
c1
D1
a2
b1
c1
D1
a1
b2
c1
D1
a1
b1
c2
D1
3.根据您的认识设计一个人事管理数据库,要求说明设计的背景及理由.
答:
要点:
首先划定该数据库的应用范围,要解决哪些问题(不一定包罗人事事务的方方面面);
在问题范围内确定数据项;
研究数据项间关系形成一个由相互关联的若干张表组成的数据库。
注:
列出各个表的数据项,表与表的参照关系。
几个独立的表并不是关系数据库的主要目的,不要有冗余。
1.2关系代数:
1.如果关系R和S没有共同的列属性,根据定义说明表R×S等于表R∞S。
答:
广义笛卡尔积(ExtendedCartesianProduct):
两个分别为n目和m目的关系R和S的广义笛卡尔积是一个(n+m)列的元组的集合。
元组的前n列是关系R的一个元组,后m列是关系S的一个元组。
若R有k1个元组,S有k2个元组,则关系R和关系S的广义笛卡尔积有k1×k2个元组。
记作:
R×S={trts|tr∈R∧ts∈S}
连接:
连接也称为θ连接。
它是从两个关系的笛卡尔积中选取属性间满足一定条件的元组。
记作:
R∞S={trts|tr∈R∧ts∈S∧tr[A]=ts[B]}
AθB
其中A和B分别为R和S上度数相等且可比的属性组。
θ是比较运算符。
连接运算的结果是从R和S的广义笛卡尔积R×S中选取R关系在A属性组上的值与S关系在B属性组上值满足比较关系θ的元组。
连接的定义中如果R和S中没有相同的列A、B,则在确定元组t在不在表R∞S中时,应忽略对列A和列B的引用,那么连接的定义就退化为广义笛卡尔积R×S,于是有R×S=R∞S。
2.对CAP数据库,用关系代数完成下列查询。
1)找出顾客、代理商和商品都在同一个城市的三元组(cid,aid,pid)。
答:
πcid,aid,pid(σC.city=A.cityandA.city=P.city((C×A)×P))
或πcid,aid,pid(σC.city=A.cityandA.city=P.city(C×A×P))
2)找出顾客、代理商和商品两两不在同一个城市的三元组(cid,aid,pid)。
答:
πcid,aid,pid(σC.city<>A.cityandA.city<>P.cityandC.city<>P.city(C×A×P))
注意:
X<>YandY<>Z并不意味着X<>Z.
3)列出所有在同一个城市代理商的aid对。
答:
A1:
=A,A2:
=A
πA1.aid,A2.aid(σA1.city=A2.cityandA1.aid<>A2.aid(A1×A2))
4)找出折扣率最大和最小的顾客cid。
答:
最大:
C1:
=C,C2:
=C
X(cid1,cid):
=πC1.cid,C2.cid(σC1.discnt>=C2.discnt(C1×C2))
X÷πC.cid(C)
最小:
C1:
=C,C2:
=C
X(cid1,cid):
=πC1.cid,C2.cid(σC1.discnt<=C2.discnt(C1×C2))
X÷πC.cid(C)
5)取出销售过所有曾被顾客c002订购过的商品的代理商的名字。
答:
πaname((πaid,pid(O)÷πpid(σcid=’c002’(O)))∞A)
6)找出只从一家代理商处订购过商品的顾客cid。
答:
OY:
=O
πcid(O)—πO.cid(σO.aid<>OY.aidandO.cid=OY.cid(O×OY))
1.3SQL:
1.检索佣金百分率大于最小百分率的代理商aid.
答:
selectaidfromagentswherepercent>any(selectpercentfromagents);
2.求通过住在北京或上海的代理商订货的顾客cid.(使用子查询和不使用子查询两种)
答:
selectdistinctcidfromorderswhereaidin
(selectaidfromagentswherecity=“北京”orcity=”上海”);
selectdistinctcidfromorders,agentswhereorders.aid=agents.aid
and(agents.city=“北京”oragents.city=”上海”);
3.R、S和T具有相同的属性列A1……An,不用高级SQL来实现关系表达式(RUNIONS)MINUST.
答:
(RUNIONS)MINUST.=(RMINUST)UNION(SMINUST)
(select*fromRwherenotexists
(select*fromTwhereR.A1=T.A1and…andR.An=T.An))
union
(select*fromSwherenotexists
(select*fromTwhereS.A1=T.A1and…andS.An=T.An));
4.求出没有为任何住在北京的顾客订购任何在天津生产的产品的代理商的aid.
答:
selecta.aidfromagentsawherenotexists
(selecto.*fromorerso,customersc,productsp
whereo.aid=a.aidando.cid=c.cidando.pid=p.pid
andc.city=’北京’andp.city=’天津’);
5.没有一个包含GROUPBY子句的查询会返回重复行,这一命题为真吗?
如果为真,解释原因;否则,给出反例.
答:
不真.
例:
selectcount(*)fromtablegroupby
返回表只有一列,有与原表一样多的行,每行值都是1.
6.说出你所用到DBMS和其中的SQL语句,他们与讲课时的不一样或者不能用.
1.4对象关系数据库:
1.对象关系数据库特点.
对象-关系数据库系统除了具有原来关系数据库的特点外,还应该有以下特点:
(1)扩充数据类型
(2)支持复杂对象
(3)支持继承的概念
(4)提供通用的规则系统
2.行对象与列对象有何不同?
行对象,一个表可以为包含用户定义类型的多个行对象,即可以违犯第一范式,ORACLE为每个行对象提供一个唯一标识;而一个表的一列(列对象)可定义包含一个用户定义类型的值,而且ORACLE不能为每一列提供一个唯一标识。
3.Value(),Ref(),Table()的作用?
Value()取属性值
Ref()引用对象值
Table()将对象转换成表
4.student_t类型中有namesex_t类型以及学号id、e-mail和入学年份(整数),其中namesex_t不空。
定义student_t类型和表student,学号id。
createtypestudent_tasobject(idchar(8),emailchar(20),yearint,enamenamesex_tnotnull);
createtablestudentofstudent_t(primarykey(id));
5.对对象关系数据库CAP,查找姓李的代理商aid和ananme,这些代理商没有销售过北京的商品。
selectA.aid,A.anamefromagentAwhereA.anamelike"李%"andnotexists(select*fromorderO,agentA,productPwhereO.pid=P.pidandO.aid=A.aidandP.city="北京")
6.检索在三个以上矩形中出现的点,显示点和覆盖这些点的矩形数。
SelectP.x,P.ycount(*)ascntfrompointsP,rectsRwhereR.inside(Value(P))>0groupbyP.x,P.yhavingcount(*)>3
2.1数据存储:
1.ORACLE中执行:
createtablecustomers(cid…)storage(initial20480,next20480,maxextents8,minextents3,pctincrease0);该文件第一次创建时,会分配多少字节的磁盘空间?
该表最大可以容纳多大的空间?
答:
第一次创建时会分配20K+20K×(3-1)=60K字节,该表最大可以容纳的空间为60K+20K×(8-3)=160K字节.
2.职工表emp中有行,每行长度100字节.
createtableemp(eidintnotnull…)pctfree25;
设块中可使用2000个字节,估算emp中行所需的块的个数.
createuniqueindexonemp(eid)pctfree20;
ROWID占6个字节,eid占4个字节,每个键的列附加一个字节.估算B树索引中每一块的索引项个数,叶子层块数?
假设目录层目录项(sepkeyval,np)与叶子层中的项相等,估算每一目录层的块数?
eid的值从1到连续,每秒可进行80块磁盘操作,估算在没有聚簇和有聚簇情况执行下列查询所需时间?
select*fromempwhereeidbetween10000and20000;
答:
①(*100)÷[2000×(1-25%)]=13334(块).
故emp中行所需的块的个数为13334;
②[2000×(1-20%)]÷(6+4+1)=145
每一块的索引项个数为:
145
÷145=1380
叶子层块数为:
1380
③K=CEIL(logn(M))=CELL(log145())=3(层)
故,包含叶子层共3层,其中目录有2层
根目录:
1块
第二层目录:
145块
④没有聚簇情况下所需时间为:
(访问索引根+访问第二层目录+访问叶子节点+访问数据行)÷80=(1+145+CELL(10000÷145)+10000)÷80=128(s)
有聚簇情况
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 作业 答案
![提示](https://static.bdocx.com/images/bang_tan.gif)