数据库系统原理与实践 第6章 习题参考答案_第1页
数据库系统原理与实践 第6章 习题参考答案_第2页
数据库系统原理与实践 第6章 习题参考答案_第3页
数据库系统原理与实践 第6章 习题参考答案_第4页
数据库系统原理与实践 第6章 习题参考答案_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第6章习题参考答案选择题1)C2)D3)D4)C5)B判断题1)F2)F3)T4)T5)T填空题1)数据库服务器端2)语句级触发器,行级触发器3)INSTEADOF触发器4)BEFORE,AFTER5)NEW,OLD简答题PostgreSQL数据库创建、修改和删除存储过程使用哪些主要命令?答:PostgreSQL使用CREATEPROCEDURE创建存储过程,包括存储过程的名称、输入参数、输出参数、以及存储过程体。使用CREATEORREPLACEPROCEDURE重新创建存储过程,对已有存储过程的源码编辑修改后重新创建。如果只需要修改存储过程拥有者、存储过程的名字、存储过程所属模式等进行修改,使用ALTERPROCEDURE命令修改存储过程。当用户创建存储过程之后,可能需要删除,DROPPROCEDURE删除现有过程的定义。使用存储过程编程,在应用上有哪些优点?答:(1)提高代码复用性。存储过程可以重复调用,如果多次需要实现这些SQL语句,就可以重复调用这些存储过程,可以减少数据库开发人员的工作量。(2)减少网络流量。存储过程位于数据库服务器上,用户只需要传递存储过程的名称和参数就可以调用,存储过程只需要将执行结果返回客户端程序,而不需要将大量的服务器端数据传输到客户端程序,降低了网络传输的数据量。(3)提高了安全性。存储过程是存储在数据库中的对象,用户执行需要相应的权限,只有授权用户才能执行相应的存储过程,从而避免了对数据库的恶意攻击,在数据库层面上实现了对数据的访问控制,让数据库管理员更好地管理和保护数据。(4)数据库事务处理。当对数据库进行复杂操作时,可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用,以确保所有SQL语句或操作的原子性和隔离性。简述PostgreSQL数据库创建触发器的主要步骤?答:使用PostgreSQL创建触发器的基本步骤:(1)检查数据库中将要创建的触发器所依附的表或视图是否存在,如果不存在,必须首先创建该表或视图。(2)创建触发器被触发时所要执行的触发器函数,该函数的类型必须是TRINGER型,是业务处理的逻辑实现。但要注意,有些关系数据库不需要独立定义触发器函数,而是在创建触发器时,将业务处理用触发器的过程体来实现。(3)创建触发器时,一般需要指明触发器依附的表、被触发的时间、是行级还是语句级触发器,触发器执行需要满足的条件。4)简述PostgreSQL数据库的存储过程和触发器的主要区别?答:(1)触发器是被动触发的,而存储过程是主动调用的。触发器是与表相关联的,当特定的事件发生时,自动被触发执行;而存储过程是由用户显式地调用执行。(2)触发器通常用于实现数据完整性约束、审计和日志记录等功能,而存储过程通常用于封装业务逻辑或复杂的数据操作。(3)触发器可以在特定的表上定义,并且可以在语句或行级别上定义,而存储过程是一个独立的可执行代码块,可以在任何地方调用执行。(4)触发器不能接收参数,而存储过程可以接收输入参数和输出参数,并可以返回结果集。(5)触发器的执行是隐式的,不能被用户控制,而存储过程的执行是显式的,由用户调用。5)简述PostgreSQL数据库游标编程的主要步骤?答:(1)声明游标:在PL/pgSQL中,对游标的访问前,必须声明游标变量,其数据类型为refcursor。(2)打开游标:游标变量在使用之前必须先被打开,在PL/pgSQL中有三种形式的OPEN语句,其中两种用于未绑定的游标变量,另外一种用于已绑定的游标变量。打开游标变量就是执行游标所绑定的查询语句,查询返回值存储游标变量中。(3)使用游标:在游标打开时,游标指针就指向游标的开始,数据库提供了FETCH和MOVE命令操纵游标记录。但游标的打开和读取必须在同一个数据库事务中。(4)CLOSE关闭游标:其声明形式为:CLOSEcursorName;当游标数据不再需要时,需要关闭当前游标,以释放其占有的系统资源,主要是释放游标中的数据所占用的内存资源,cursorName是指要关闭游标的名字。5.实践操作题在简易教学管理数据库系统中,定义如下关系模式:STUDENT(SID,SNAME,AGE,SEX)SC(SID,CID,GRADE)COURSE(CID,CNAME,TEACHER)编写触发器实现表与表之间的参照完整性约束;用Springboot+Mybatis+JSP+PostgreSQL编程实现查询学生的各科成绩。参考答案:为了实现表与表之间的参照完整性约束,我们需要确保在`SC`表中插入或更新数据时,`SID`和`CID`字段分别在`STUDENT`和`COURSE`表中存在。以下是一个简单的触发器示例,用于在PostgreSQL数据库中实现这一点:第1步:创建触发器函数,用于检查参照完整性CREATEORREPLACEFUNCTIONcheck_integrity()RETURNSTRIGGERAS$$BEGIN--检查学生ID是否存在于STUDENT表IFNOTEXISTS(SELECT1FROMSTUDENTWHERESID=NEW.SID)THENRAISEEXCEPTION'学生ID不存在:%',NEW.SID;ENDIF;--检查课程ID是否存在于COURSE表IFNOTEXISTS(SELECT1FROMCOURSEWHERECID=NEW.CID)THENRAISEEXCEPTION'课程ID不存在:%',NEW.CID;ENDIF;--如果检查通过,则允许插入或更新RETURNNEW;END;$$LANGUAGEplpgsql;第2步:创建触发器,当SC表插入或更新数据时,调用上面的函数CREATETRIGGERtrigger_check_integrityBEFOREINSERTORUPDATEONSCFOREACHROWEXECUTEFUNCTIONcheck_integrity();第3步:使用SpringBoot+MyBatis+JSP+PostgreSQL来实现查询学生的各科成绩的功能。这里只提供核心代码的概述,不包括完整的项目结构和所有必要的配置文件。(1)SpringBootController:@RestController@RequestMapping("/students")publicclassStudentController{@AutowiredprivateStudentServicestudentService;@GetMapping("/{sid}/grades")publicResponseEntity<?>getStudentGrades(@PathVariable("sid")Stringsid){try{List<GradeDTO>grades=studentService.getStudentGrades(sid);returnResponseEntity.ok(grades);}catch(Exceptione){returnResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(e.getMessage());}}}(2)ServiceLayer:@ServicepublicclassStudentService{@AutowiredprivateStudentMapperstudentMapper;publicList<GradeDTO>getStudentGrades(Stringsid){returnstudentMapper.findGradesByStudentId(sid);}}(3)MyBatisMapperInterface:

@MapperpublicinterfaceStudentMapper{@Select("SELECTSC.SID,S.SNAME,C.CNAME,SC.GRADE"+"FROMSC"+"JOINSTUDENTSONSC.SID=S.SID"+"JOINCOURSECONSC.CID=C.CID"+"WHERESC.SID=#{sid}")List<GradeDTO>findGradesByStudentId(Stringsid);}(4)DTO(DataTransferObject):publicclassGradeDTO{privateStringsid;privateStringsname;privateStringcname;privateIntegergrade;//GettersandSetters}(5)JSPView(简单示例,显示学生的成绩列表):<%@pagecontentType="text/html;charset=UTF-8"language="java"%><html><head><title>学生成绩</title></head><body><h2>学生成绩列表</h2><tableborder="1"><tr><th>学生ID</th><th>学生姓名</th><th>课程名称</th><th>成绩</th></tr><c:forEachvar="grade"items="${grades}"><tr><td>${grade.sid}</td><td>${grade.sname}</td><td>${ame}</td>

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论