数据库作业及答案.docx
- 文档编号:25779750
- 上传时间:2023-06-13
- 格式:DOCX
- 页数:25
- 大小:56.28KB
数据库作业及答案.docx
《数据库作业及答案.docx》由会员分享,可在线阅读,更多相关《数据库作业及答案.docx(25页珍藏版)》请在冰豆网上搜索。
数据库作业及答案
作业及参考答案
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)
有聚簇情况下所需时间为:
(访问索引根+访问第二层目录+访问叶子节点)÷80=(1+145+CELL(10000÷145))÷80=2.7(s)
3.解释散列簇.
答:
散列簇(HashCluster)是簇的另一种形式,它同样把若干有共用列的表聚簇在一起,但是散列簇不建索引,簇中的数据要通过散列函数计算(通过HASH函数生成HASH值,由HASH值确定键值对应行的存储位置)得出物理位置,一步到位.它可以极大程度的提高等值查询的效率.
2.2数据管理:
1.利用非过程性约束和过程性约束完成完整性定义:
保证表agents的行的城市值必须是表coutomers中的城市之一。
答:
非过程性约束是在建表时建立约束
createtableAGENT(aidchar(4)notnull,citychar(4),…,
primarykey(aid),
constraintcityrefforeignkey(city)referencescustomers(city)…);
过程性约束是建立触发器能引起一个动作的执行约束
createtrggert_c
beforeinsertorupdateofcityonAGENT
statement
declarev1string;
v2string;
v3integer;
begin
v2:
=:
new.city;
v1:
=:
old.city;
selectcount(*)into:
v3fromcustomerwherecity=:
v2;
ifv3=0then
dbms_output.put_line(‘city无效’);
rollback;
endif
end;
2.CAP数据库中的四张表对应各自的用户,彼此不能相互操作,请给出让彼此之间可以相互查看的措施。
答:
可以创建角色,该角色可以查看各用户的四张表。
把角色授予用户。
3.结合数据库恢复的内容谈谈如何保证数据库的可靠性。
答:
ORACLE数据库的恢复过程分两步进行,首先将把存放在重做日志文件中的所有重做运用到数据文件,之后对、重做中所有未提交的事务进行回滚,这样所有数据就恢复到发生灾难那一时刻了。
数据库的恢复只能在发生故障之前的数据文件上运用重做,将其恢复到故障时刻,而不能将数据文件反向回滚到之前的某一个时刻。
4、简述资源限制文件的作用。
答:
资源限制文件(profile)可以使用企业管理器(OEM)或SQL*Plus创建环境资源文件,使资源限制文件生效需在init.ora中设置resource_limit=TURE。
资源限制文件可以做到口令限制和资源限制。
资源限制包括又可以分为会话级限制(当达到限制要求时则断开会话)和调用级限制(当达到限制要求时回退语句),具体有:
限制会话的数量、每个会话使用CPU时间(100秒为单位)、CPU调用的次数、逻辑读的次数、每次调用的逻辑读的次数、空闲时间以及连接时间等。
5、将没有任何权限的角色授予用户会起什么作用?
答:
角色介于权限和用户之间,是一组系统权限和对象权限的集合,把它们组合在一起赋予一个名字。
用户被授予某个角色,则拥有该角色的所有权限。
因此将没有任何权限的角色授予用户,则以后对该用户的授权可变为对角色的授权,实际使用时经常将同一类型的用户的权限归结为角色的权限,增减用户的权限问题变成角色权限的增减,简化操作。
3.1嵌入式SQL3.2事务处理技术:
1.解释游标.
游标:
在查询结果的记录集合中移动的指针。
若一个SQL语句返回单个元组,则不用游标。
若一个SQL语句返回多个元组,则使用游标。
2.针对CAP数据库,编写应用程序:
给出任意产品的pid,列出购买该产品的前5名顾客(cid,cname)及其购买数量,即这些顾客购买该产品的数量最大.
#defineture1
#include
#include“prompt.h”
execsqlincludesqlca;/*声明通讯区*/
intmain()
{
charpid_prompt[]=“请输入产品号:
”;
execsqlbegindeclaresection;
charcust_id[5],cust_name[20],cid[5];
doubleqty;
execsqlenddeclaresection;/*声明变量*/
execsqldeclareorder_qtycursorfor
selectfirst5cust_id,cust_name,qty
fromcustomersc,orderso
wherec.cust_id=o.cidando.pid=pid_prompt
orderbyo.qty;/*游标*/
execsqlwheneversqlerrorgotoreport_error;
execsqlwhenevernotfoundgotofinish;
/*出错处理*/
strcpy(user_name,”mytest”);
strcpy(user_pwd,”test”);
execsqlconnect:
user_name
identifiedby:
user_pwd;/*连接*/
while((prompt(pid_prompt,1,o.pid,4))>=0){
execsqlopenagent_dollars;
while(ture){
execsqlfetchorder_qtyinto:
cust_id,:
cust_name,:
qty;/*游标取值*/
printf(“%s%s%11.2f\n”,
cust_id,cust_name,qty);
}
continue;
finish:
execsqlcloseorder_qty;
execsqlcommitwork;
}/*输入顾客ID的代理商和金额*/
execsqlcommitrelease;/*正常释放连接*/
return0;
report_error:
print_dberror();/*出错信息*/
execsqlrollbackrelease;/*释放连接*/
return1;
3.说明数据库管理系统保证数据一致性和并发性的机制.
事务处理是实现数据库一致性和并行性的重要手段,在保证一致性的前提下最大限度地提高并发度。
具体采用了数据封锁技术和事务技术,不同封锁协议在不同程度上保证数据一致性和系统并发性。
4.ORACLE为什么设置回退段?
ORACLE为了适应事务控制设置了回退段这一数据库对象.系统利用回退段来确保诸如读一致性、数据库恢复等管理功能。
ORACLE在缺省情况下,读数据不用加锁,通过回退段(RollbackSegment)保证用户不读脏数据和可以重复读
5.数据库设计者在保证数据一致性和并发性方面可以有哪些措施?
数据库设计者应该利用各种方法减少数据对象的封锁时间,以提高系统并发能力;在事务中尽可能晚地发出封锁申请;在备份的数据库对象上操作以减少封锁时间;利用索引减少封锁时间,查询操作可以根本不访问索引关联的表,而直接给出查询结果。
数据库设计者应该按照约定顺序封锁表减少出现死锁的可能性,以提高系统并发能力。
3.3数据库应用系统体系结构3.4中间件:
1.一个典型的数据库应用程序由哪四部分组成?
由用户界面、应用表示逻辑、事务逻辑、数据管理四部分组成。
2.客户机和服务器的任务各是什么?
客户程序运行用户的应用程序,向数据库服务器发送SQL请求,数据库服务器接受客户机的请求,并将处理结果返回客户端。
减少了网络信息的传输,系统采用数据锁定、事务技术、存储过程等数据库技术保证数据完整一致准确。
÷
3.从C/S的结构看,其发展趋势如何?
采用了三层体系结构,将应用分成表示部分、应用逻辑、数据访问,使其各自独立并单独实现,分别称为客户、应用服务器和数据库服务器;同时数据在发送到网络之前由功能服务器加以过滤,网络流量会减少,另外客户端并不是直接同数据库打交道,而是通过中间层的统一调用来实现,在灵活性和独立性方面较好,适合于不同数据库的互联。
4.举例说明C/S系统开发中的并发控制、安全控制等管理问题。
C/S系统的并发控制:
C/S系统必须提供封锁机制,事务编程要尽可能避免死锁,并允许死锁的发生及提供解决死锁的方案,保证并发执行的同时维护数据的一致。
封锁机制可以由DBMS自动控制,也可以通过显式加锁完成。
C/S系统的完整性约束:
在C/S系统中,数据完整性约束是在服务器上定义,并由服务器来检查约束,这样能方便地实现对数据库的完整性和一致性控制。
如果由客户机检查约束,检查逻辑必须包含在每一个应用程序中,既浪费又容易出错。
C/S系统的安全性控制:
DBMS通常运行在后台服务器上,自身已具备安全管理功能。
应用程序运行在前端客户机上,安全性问题由开发者自己设计。
通过内核级透明代理、用户授权机制、智能型日志、备份及恢复机制将后台DBMS的安全机制与前端应用程序的安全机制有机结合起来,形成统一的安全保密机制。
5.分布式数据库系统的优点缺点是什么?
优点:
采用了分布式控制、增强了数据共享性、提高了系统可靠性和可用性、改善了系统性能、可扩充性好。
缺点:
系统更加复杂、增加了开销(硬件开销、通信开销、冗余数据管理开销、保证数据库全局并行性、并行操作的可串行性、安全性、完整性的开销、软件开发费用)。
6.结合实际谈谈B/S模式中的中间件。
基于J2EE技术架构设计的多层B/S结构,他具备以下特点:
集中化管理和维护,客户端的免安装和零维护,极大的降低了企业的维护成本。
客户层支持从WEB到PDA等各种终端设备,支持移动商务;采用纯JAVA技术开发,可以在多种主流服务器和操作系统平台上运行;实现对多数据库的适配;方便用户对系统的扩展、升级、维护,同时也能充分保护用户的投资。
高度的可靠性应用:
EJB中间件的抗崩溃特性(事务处理机制、资源统一管理)。
应用程序在例外(EXCEPTION)处理、并发控制、容错、日志处理等的有效设计,提高了应用程序本身的可靠性。
系统有自检与自恢复能力,并通过动态的监控能力提供故障快速排除的手段。
高度的安全性应用:
采用B/S多层结构,系统代码全部放于服务器上,只有服务器管理人员才能更改代码。
只有运行在服务器上的代码才可以访问数据库,客户端不能直接访问,这样可以保证服务器安全。
4.1Oracle数据库体系结构
1、简述ORACLE数据库的组成。
答:
ORACLE数据库由实例(Instance)和物理文件两部分组成。
1、实例(Instance):
包括内存结构和ORACLE进程。
其中内存包括共享池、数据库缓冲区和日志缓冲区,ORACLE进程包括数据库写入(DBWR)、日志写入(LGWR)、检查点(CKPT)、系统进程(SMON)、系统监控(PMON)、归档进程(ARCH)等一系列进程。
2、物理文件:
包括数据文件、日志文件、控制文件,以及参数文件、口令文件、归档文件等。
2、初始化参数的作用是什么?
答:
初始化参数的作用为:
(1)初始化参数文件也称启动参数文件,缺省名为init.ora。
在数据库启动时,在创建实例或读取控制文件之前,先读取init.ora文件,直到数据库被关闭并重新启动,对init.ora文件中参数的修改才被承认。
(2)初始化参数文件是DBMS的主要配置点,包括定义名称的参数、设置静态限制的参数、影响动态性能的参数、控制或修改数据库和实例操作的某个方面。
Init.ora文件中的值决定着数据库和实例的特性,例如共享池、高速缓存、重做日志缓存分配、后台进程的自动启动、控制文件的读取、自动联机
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 作业 答案