• 143.00 KB
  • 2022-04-22 11:26:14 发布

《数据库系统原理及应用》习题集及参考答案.doc

  • 16页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'《数据库系统原理及应用》习题集及参考答案一、简答题1、什么是数据库管理系统?一种负责数据库的建立、操作、管理和维护的软件系统。2、数据库系统有哪几种模式?分别用来描述什么?(1)外模式是用户的数据视图,用来描述数据的局部逻辑结构,是模式的子集。(2)模式是所有用户的公共数据视图,用来描述数据库中全体数据的全局逻辑结构和特征。(3)内模式又称存储模式,描述数据的物理结构及存储方式3、什么是事务?事务有哪些特征?答:所谓事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位。事务的特征:原子性、一致性、隔离性、持续性。4、POWERBUILDER中事务对象有何作用?答:PowerBuider的事务对象是应用程序与数据库之间进行通信的桥梁,在应用程序初启时,系统自动创一个为SQLCA(SQLCommunicationArea,SQL通讯区)的全局事务对象,该对象在应用程序的任何地方都可以访问应用程序与数据库的所有通信都需要通过事务对象来完成,除了直接使用系统的缺省事务对SQLCA外,开发人员也可以创建自己的事务对象。5、SQLSERVER中INSERTED表和DELETED表有何用?答:触发器中用到两种特殊的表:删除表和插入表触发器中使用名为“deleted"和“inserted"来参照这些表;删除表存储受DELTE和UPDATE语句影响的行的副本当执行DELETE或UPDATE语句时,行从触发器表中删除并传递到删除表中。删除表和触发器表通常没有共有的行。插入表存储受INSERT和UPDATE语句影响的行的副本当执行一NSERT或UPDAT语句时,新行同时增加到插入表和触发器表中。插入表中的行是触发器表中新行的副本可使用删除表和插入表中的行来参照相关表中的行,或测试被删除或插入行中的值。6、数据库系统由哪几部分构成?答:数据库系统是指在计算机系统中引入数据库后的系统,一般由数据库、数据库管理系统(及其开发工具)、应用系统、数据库管理员构成。7、什么是候选码?什么是主码?主码只能有一个属性吗?答:能唯一标识实体的属性或属性组称为超码,其任意真子集都不能成为超码的最小超码称为候选码;第16页共16页 从所有候选码中选定一个用来区别同一实体集中的不同实体,称作主码;主码只能有一个属性。8、在E-R模型中联系是用来反映什么样的信息,它有几种类型?答:用来反映为实体(型)内部的联系和实体(型)之间的联系,实体内部的联系通常是指组成实体的各属性之间的联系;实体之间的联系通常是指不同实体集之间的联系。联系可分为三种:(1)一对一联系(1:1)(2)一对多联系(1:n)(3)多对多联系(m:n)。9、什么是锁协议?什么是两段锁协议?答:数据库管理系统的并发控制在运用封锁方法时,对数据对象加锁时需要约定一些规则,例如何时申请封锁、持锁时间、何时释放封锁等;这些规则就是锁协议。所谓两段锁协议是指所有事务必须两个阶段对数据项加锁和解锁。(1)在对任何数据进行读、写操作之前,首先分申请并获得对该数据项加锁和解锁;(2)在释放一个封锁之后,事务不现申请和获得任何其他封锁。10、数据库恢复的依据是什么?答:基本原理就是利用存储在后备副本、日志文件和数据库镜像中的冗余数据来重建数据库。11、关系数据库中的实体完整性和参照完整性对数据分别有什么样的约束?答:实体完整性规则是:若属性A是基本关系R的主属性,则属性A不能取空值。参照完整性规则是:若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:或者取空值(F的每个属性值均为空值);或者等于S中某个元组的主码值。12、数据库管理系统为什么要对事务进行并发控制?如果不进行并发控制会出现哪些问题?答:为了充分利用系统资源发挥数据库共享资源的特点,应该允许多个事务并行地执行,当多用户并发地存取数据库时就会产生多个事务同时存取同一数据的情况,若对并发操作不加控制就可能会存取和存储不正确的数据,破坏事务的一致性和数据库的一致性;所以数据库管理系统必须提供并发控制机制。如果不进行并发控制会出现数据丢失修改、不可重复读和读“脏”数据等问题。13、在进行总体E-R图的优化时具体做什么?答:消除多余的属性和多余的联系。14、什么是外码?建立外码的作用是什么?答:外码指关系R中的一个属性组,它不是R的码,但它与另一个关系S的码相对应,则称这个属性组为R的外码。如S关系中的D#建立外码的作用:在相应的表之间建立一种关联。15、数据库的结构数据模型有哪几种?按此划分SQLSERVER属于哪种类型?第16页共16页 答:有层次模型、网状模型、关系模型、面向对象模型、对象关系模型等几种;SQLSERVER属于关系模型。16、数据库管理系统为什么要对事务进行并发调度?并发调度时为什么要进行并发控制?答:数据库是一个共享资源,可以供多个用户使用;如果事务一个一个地串行执行,则许多系统资源将处于空闲状态,因此为了充分利用系统资源发挥数据库共享资源的特点,应该允许多个事务并行地执行,进行并发调度;当多用户并发地存取数据库时就会产生多个事务同时存取同一数据的情况,若对并发操作不加控制就可能会存取和存储不正确的数据,破坏事务的一致性和数据库的一致性;所以数据库管理系统必须提供并发控制机制。17、写出数据库设计的步骤。答:(1)需求分析;(2)概念结构设计;(3)逻辑结构设计;(4)物理结构设计;(5)数据库实施;(6)数据库运行和维护。18、在建立E-R模型时如何区分实体和属性?答:在给定的应用环境中,可以遵循以下准则来划分实体和属性:(1)属性与它所描述的实体之间只能是单值联系,即联系只能是一对多的;(2)属性不能再有需要进一步描述的性质;(1)作为属性的数据项,除了它所描述的实体之外,不能再与其它实体具有联系。19、什么是触发器?答:是一种特殊类型的存储程序,在试图修改触发器所保护的表中的数据时,它就会自动执行。触发器可以包括大多数Transact_sql语句。触发器的查询计划存储在过程缓冲中。20、事务对象的属性SQLCODE的返回值有哪些,分别表示什么?答:SQLCode指示最近一次SQL语句是操作成功还是失败,其可能取值为:0操作成功-1操作失败100操作成功,但无返回数据21、什么是ODBC?将它和专用接口进行比较。答:ODBC(OpenDataBaseConnectivity)接口是微软公司提出的开放式数据库互连标准接口,它以关系数据库标准查询语言SQL来存取连接到的数据源,ODBC支持单个应用系统访问多个不同的数据库管理系统(DBMS),并且,对应用系统的开发人员来说,它能够用统一的方法处理不同的数据源,减轻了学习新系统的压力。现在,除了Oracle,Sybase,MSSQLServer,IBMDB/3等大型数据库管理系统支持ODBC接口外,诸如dBase,FoxPro,SybaseSQLAnywhere,Excel之类的数据源也都支持ODBC接口。专用接口针对具体的数据库管理系统而设计,对诸如Oracle,Sybase,informix之类的大型数据库管理系统,PowerBuilder第16页共16页 8.0企业版都提供了专用接口,通过专用接口我们可以将PowerBuilder8.0连接到相应的数据库上因为专用接口在设计上针对特定数据库的特点,能够充分发挥特定数据库的优势因此使用专用接口可以大大提高应用程序访问数据库的速度,所以应该尽可能使用专用接口而不是ODBC接口。数据库不同、数据库的版本不同,使用的专用接口也不同。22、什么是存储过程,可以在POWERBUILDER程序中调用存储过程吗?举例说明。答:存储过程是存储在服务器上的一个SQL语句的命令集合,存储过程是重复执行封装语句的一种有效方法。存储过程支持用户声明的变量、条件执行以及其他一些强大的编程功能。可以在POWERBUILDER程序中调用存储过程;例如:创建datawindow的时候datasource选StoredProcedure会出现一个title为"SelectStoredProcedure:...." 的窗口,选择所需要的SP,按OK按钮.以后的操作和其他dw的建立一样。也可以指定SP的返回结果集的各column的名称。23、什么是视图?它有何作用?答:视图是命名的、从基本表中导出的虚表。它在物理上并不存在。存在的只是它的定义;视图中的数据是从基本表中导出的。每次对视图查询都要重新计算;视图之上可以再定义视图。视图的作用是让一定权限的操作者不用操作基本表就能满足其相应的操作要求,从而实现了对数据的安全管理。24、如何在POWERBUILDER程序中实现copy文件的功能?答:FUNCTIONboolean    CopyFile(refstringcfrom,    refstringcto,    booleanflag)    LIBRARY"Kernel.dll"25、如何在POWERBUILDER程序中实现将数据窗口对象中的数据导出为EXCEL文件? 答:dwcontrol.SaveAs({filename,saveastype,colheading})二、交互式SQL1有一个教学管理数据库,包含以下基本表:(表略)用交互式SQL完成:(1)建立学生表,主码为学号,性别为‘男’或‘女’。Createtable学生(学号#char(8)notnull,姓名char(8)notnull,性别char(2),年龄smallint,年级char(8),系编号integer,primarykey(学号#),check(性别=‘男’或‘女’),第16页共16页 )(1)建立教师表,主码为教师编号,外码为系编号。Createtable教师(教师编号#char(8)notnull,姓名char(8)notnull,年龄smallint,职称char(4),系编号integer,primarykey(教师编号#),foreignkey(系编号)references院系(系编号#),)(2)建立选课表,主码为学号和课程编号,外码为学号,课程编号。Createtable选课(学号#char(8),课程编号#char(4),成绩smallint,primarykey(学号#,课程编号#),foreignkey(学号#)references学生(学号#),foreignkey(课程编号#)references课程(课程编号#),check((成绩isnull)or(成绩between0and100)),)(3)将学生张三从编号为001的系转到编号为002的系。Updata学生Set系编号#=002Where姓名=“张三”and系编号#=001(4)统计学生总人数。Selectcount(学号#)From学生(5)显示计算机系的学生的信息。Select*From教师,任课,课程Wher课程名=”数据库原理”and课程.课程编号#=任课.课程编号#and任课.教师编号#=教师.教师编号#(6)查找法律系的系办电话。Select系办电话From院系Where系名=“法律系”第16页共16页 (1)删除2000级的学生记录。Deletefrom学生Where年级=“2000级”(2)将计算机系教师张明的职称升为教授。Updata教师Set职称=“教授”Where姓名=”张明”and教师编号#=(select教师编号#From院系Where系名=“计算机系”)(3)统计计算机系教师张明的任课门数。Selectcount(课程编号#)From院系,教师,任课Where院系.系名=“计算机系”and院系.系编号#=教师.系编号#and教师.教师编号#=任课.教师编号#(4)统计每个系的教师的人数。Select系编号#,count(教师编号#)From教师Groupby系编号#(5)查找教授数据库原理的教师的姓名。Select教师.姓名From教师,任课,课程Where课程名=“数据库原理”and课程.课程编号#=任课.课程编号#and任课.教师编号#=教师.教师编号#(6)删除1020号教师的任课记录。Deletefrom任课Where教师编号#=“1020”(7)将课程数据库原理的学分设为4.Updata课程Set学分=4Where课程名=数据库原理(8)学生王明每选一个学分交费100元,统计它的选课总费用。Selectsum(学分)*100From学生,课程,选课Where学生.学号#=选课.学号#and选课.课程编号=课程.课程编号#(9)统计20岁的学生总人数。Selectcount(age)From学生第16页共16页 Where学生.年龄=20(1)选修数据库原理的学生名单secect学生.姓名from学生,课程,选课where课程.课程名=“数据库原理”and课程.课程编号#=选课.课程编号#and选课.学号#=学生.学号#(2)删除20030号学生的选课记录deletefrom选课where学号#=“200030”(3)建立一个存储过程,通过输入学号,显示学生的姓名,选课课程名,成绩,并统计出选课门数。Createprocedurereport@idchar(8)asSelect学生.姓名,课程.课程名,选课.成绩,count(课程.课程编号#)From学生,课程,选课Where学生.学号#=@idand选课.学号#=学生.学号#and选课.课程编号#=课程.课程编号#(4)建立一个存储过程,通过输入教师编号,显示教师的姓名,任课课程名,教师院系。Createprocedurereport@idchar(8)asSelect教师.姓名,课程.课程名,院系.系名From院系,课程,教师,任课Where教师.教师编号#=@idand任课.教师编号#=教师.教师编号#and课程.课程编号#=任课.课程编号and教师.系编号=院系.系编号(5)建立一个存储过程,输入系编号显示学生的学号,姓名。Createprocedurereport@idchar(8)asSelect学号#,姓名From学生Where系编号#=@id2、有一数据库,包含以下基本表:(表略)(1)建立销售明细表,销售编号为主码,外码为商品编号,会员号。Createtable销售明细(销售编号#char(4),商品编号#char(4),会员号#char(4),数量integer,时间time,primarykey(销售编号#),foreignkey(商品编号#)references商品(商品编号#),foreignkey(会员号#)references会员(会员号#),第16页共16页 )(1)添加一条商品记录(00697,雕牌肥皂,浙江,2.00,日化)insertinto商品values(00697,”雕牌肥皂”,”浙江”,2.00,”日化”)(2)产生00695号产品的销售细帐。Select*From销售明细Where商品编号#=00695(3)根据商品编号00695查找该商品的销售总量。Selectsum(数量)From销售明细Where商品编号#=00695(4)根据会员号104095删除其会员记录。Deletefrom会员Where会员号#=104095(6)建立一个黄金会员视图。(消费总金额高于5000的会员为黄金会员)createview黄金会员as(select*from会员where消费总金额>5000)(7)建立一个触发器,实现当输入一条销售记录时,将消费金额自动累加到会员的消费总金额。CreatetriggertrinameOn销售明细ForinsertasUpdata会员Set消费总金额=消费总金额+sum(销售明细.数量*商品.单价)Where销售明细.会员号#=会员.会员号#and商品.商品编号#=销售明细.商品编号#三、POWERBUILDER编程1、(1)对w_data的open事件编程,使w_data一打开dw_1中就显示数据。Dw_1.settransobjict(splca)Dw_1.retrieve()(2)添加intII=dw_1.insertrow(0)第16页共16页 Dw_1.scrolltorow(i)Dw_1.setfocus()删除dw_1.deleterow(0)保存intjj=dw_1.updata()ifI=-1thenmessagebox(“information”,“数据无法保存”)endif关闭close(parent)(3)对w_data的closequery事件编程,使dw_1中的数据发生改变而又未保存就退出窗口时给用户一个消息框提示。IntegermIfdw_1.modifiedcount()+deletedcount()>0thenM=messagebox(“信息”“数据已改变,是否保存”,question!YesNoCance!)Ifm=1thenIfdw_1.updata()=-1thenMessagebox(“information”,”无法保存数据”)ElseMessagebox(“information”,”已保存数据”)EndifReturn0Elseifm=2thenReturn0Elseifm=3thenReturn12、ddlb_1中为各系名称,当选择了一个系后tv_1显示该系学生姓名,对ddlb_1的selectionchanged事件编程。IntIStringoutnameDeclarenamecurcursorforSelectdistinctdepartmentFrom学生Wheredepartment=:ddlb_1.textOpennamecur;Ifsqlca.sqlcode=-1thenMessagebox(“sqlerror“,sqlca,sqlerrtext)ElseFetchnamecurinto:outname;Dowheresqlca.sqlcode=0第16页共16页 Frtchnamecurinto:outname;I=tv_1.insertitemlast(),outname,2)L00pwhilesqlca.sqlcode=0Tv_1:deleteitem(i)EndifClosenamecur;3、ddlb_1为下拉列表框,st_1,st_2为静态文本框。该窗口打开时,ddlb_1从数据库中的院系表中读出了所有系名,当选择了某系时st_1,st_2分别显示该系系领导和系办电话。(1)在w_1的open事件下编程。StringoutnameDeclarenamecurcursorforSelectdistinctdepartmentFrom院系Wheredepartment=:ddlb_1.textOpennamecur;Ifsqlca.sqlcode=-1thenMessagebox(“sqlerror“,sqlca,sqlerrtext)ElseFetchnamecurinto:outname;Dowheresqlca.sqlcode=0Ddlb_1.additem(outname)Fetchnamecurinto:outname;L00pEndifClosenamecur;(2)在ddlb_1的selectionchanged事件下编程。Select系领导,系办电话From院系Where系名=:ddlb_1.text:st_1.text=系领导:st_2.text=系办电话4、w_query上有控件ddlb_1和dw_1,在ddlb_1中选择系名后dw_1中显示该系的学生。(1)如果通过带参数的数据窗口对象来完成,请问dw_1中的数据窗口对象的数据源为quickselect还是sqlselect。答:sqlselect。(2)为ddlb_1的selectionchanged事件编程。Dw_1.settransobject(sqlca)Dw_1.retricve(ddlb_1.text)5、当选择了某单选框并输入选择条件,按回车后,dw_1中显示满足条件的记录。请对以下控件编程。第16页共16页 (1)rb_1sle_1.enabled=true(2)sle_1dw-1.setfilter(“姓名=‘”+sle_1.text+”‘”)dw_1.filter()cb_1.visible=true(3)cb_1rb_1.checked=falserb_2.checked=falserb_3.checked=falserb_4.checked=falsesle_1.text=“”sle_2.text=“”sle_3.text=“”sle_4.text=“”sle_1.enable=falsesle_2.enable=falsesle_3.enable=falsesle_4.enable=false6、lv_1为列表视图,报表风格,当w_list打开时lv_list中显示数据库中学生表的所有学生的信息。请为w_1的open事件编程。IntegerI,j,outageStringoutname,outsex,soutageLv_1.addcolumn(“姓名”,left!,800)Lv_1.addcolumn(“性别”,left!,500)Lv_1.addcolumn(“年龄”,left!,200)DeclarenamecurcursorforSelect姓名,性别,年龄From学生;Opennamecur;Ifsqlca.sqlcode=1thenMessagebox(“sql.error”,sqlca.sqlerrtext)ElseI=1DoFetchnamecurinto:outname,:outsex,:outage;J=ILv_1.setitem(I,2,outname)Lv_1.setitem(I,2,outsex)Soutage=string(outage)Lv_1.setitem(I,3,soutage)第16页共16页 I++Loopwhilesqlca.sqlcode=0Lv_1.deleteitem(j)EndifClosenamecur;7、(1)写出菜单项“注册新用户”的clicked事件的代码。Open(w_new)(2)写出菜单“退出”的clicked事件中的代码。Close(parentwindow)(3)在sle_1中输入新用户名,如果此用户名已存在则出现消息框,提示“此用户名已存在,请另输入用户名”。SelectusernameFromuserIfusername=sle_1.textthenmsgbox(“提示”,”此用户名已存在,请另输入用户名”)(4)写出cb_1的clicked事件中的代码。InsertintouserValues(:sle_1.text,:sle_2.text,:ddlb_1.text);8、窗口完成统计功能。按学号分组显示学生平均成绩,并显示总评成绩。(1)如果计算域平均成绩名为compute_1,写出语句使平均成绩不及格者的平均成绩红色显示。Dw_1.object.compute_1.color=“0~tif(compute_1<60,255,0)”(2)在数据窗口对象的画板上计算域总评成绩和页码分别放在哪个区域。答:分别放在summart区域和footer区域。9、窗口打开时,树开视图显示数据库中所有学生的姓名,当你选择一个姓名时,在右侧的单行文本编辑框中显示学生的详细信息。(1)为该窗口的open事件编程tv_1.insertitemfirst(0,“学生”,1)tv_1.insertitemfirst(1,“张明”,2)tv_1.insertitemfirst(1,“王红”,2)tv_1.insertitemfirst(1,“周萧萧”,2)(2)为tv_1的selectionchanged事件编程intItreeviewiteml_lvI=tv_1.finditem(currentTreeItem!,0)Tv_1.getitem(I,l_lv)Select姓名,性别,年龄第16页共16页 Into:sle_1.text,:sle_2.text,:sle_3.textFrom学生Where姓名=:l_lv.lable1;三、数据库设计1、某工厂欲建立一个物质管理系统,该系统包含零件,产品,仓库,职工的信息,其中仓库用于存入零件。要求:(1)画出E—R图仓库负责人存放量Q2天数零件型号零件名称零件编号仓库品存放构成零件品参加职工工资负责产品零件数Q1产品型号产品名称产品编号mnmm1m1nn姓名职工编号号性别职称定称工龄(2)将其转化为关系模式产品(产品编号#,产品名称,产品型号)职工(职工编号#,姓名,性别,工龄,职称)参加(职工编号#,产品编号#,天数)零件(零件编号#,零件名称,零件型号)第16页共16页 构成(产品编号#,零件编号#,零件数Q1)仓库(仓库编号#,仓库负责人)存放(仓库编号#,零件编号#,存放量Q2)1、某工厂欲建立一个人事管理系统,该系统包含部门信息,职工信息,产品信息。(1)画出E—R图部门名称部门负责人部门电话部门编号部门1产品编号月产量1属于领导产品名称参加mnn1产品资工职工资工11职工编号负责产品型号职称工龄性别姓名(2)将其转化为关系模式部门(部门编号#,部门名称,部门电话,部门负责人)职工(职工编号#,姓名,性别,工龄,职称,部门编号#)产品(产品编号#,产品名称,产品型号)参加(职工编号#,产品编号#,月产量)第16页共16页 1、某图书馆欲建立一个图书管理系统,该系统包含图书,读者,职工的信息。(1)画出E—R图图书编号数量级价格出版社作者类别名称m出借日期nm性别职工编号n工龄证号姓名归还日期职工资工借阅维护图书资工读者资工借书证号性别住址证号身份证号性别姓名(2)将其转化为关系模式图书(图书编号#,名称,类别,作者,出版社,价格,数量)职工(职工编号#,姓名,性别,工龄)维护(职工编号#,图书编号#)读者(借书证号#,姓名,性别,身份证号,住址)借阅(借书证号#,图书编号#,出借日期,归还日期)2、某数据库系统欲实现一个汽车维修店的信息管理功能,该系统包含员工信息,汽车信息,客户信息,维修项目信息。(1)画出E—R图第16页共16页 维修记录登记时间m型号品牌汽车编号维修客户资工汽车资工送修时间员工资工nm工龄证号性别姓名员工编号属于n住址证号身份证号性别姓名(2)将其转化为关系模式汽车(汽车编号#,品牌,型号,登记时间,维修记录)客户(身份证号#,姓名,性别,住址)属于(汽车编号#,身份证号#)员工(员工编号#,姓名,性别,工龄)维修(汽车编号#,员工编号#,送修时间)第16页共16页'