数据库中存储过程教学探讨

来源 :软件 | 被引量 : 0次 | 上传用户:muyiwenwu
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘  要: 数据库多年来一直是计算机科学中重要的分支,有着十分广泛的应用。各个层次的工科学校都在多数专业里开设了不同种类的数据库课程,根据实际情况的不同一般都会采取适合自己学校的教学方法,对内容有不同方向的侧重。存储过程的应用是数据库应用中重要的一环,如何在教学过程中把握它的难点与重点是一件十分困难的事情。为了解决这个问题,进行了深入的分析探讨,以此来提高存储过程的教学效果。
  关键词: 存储过程;数据库编程;函数;关系数据库
  中图分类号: G642.4    文献标识码: A    DOI:10.3969/j.issn.1003-6970.2019.05.045
  本文著录格式:杨武英,冯志鑫. 数据库中存储过程教学探讨[J]. 软件,2019,40(5):230232
  【Abstract】: Database has been an important branch of computer science for many years, and has a very wide range of applications. Engineering schools at all levels have offered different kinds of database courses in most majors. According to the actual situation, they usually adopt teaching methods suitable for their own schools, with different emphasis on content. The application of stored procedure is an important part of database application. How to grasp its difficulties and key points in the teaching process is a very difficult thing. This paper makes an in-depth analysis and discussion of this problem in order to improve the teaching effectiveness of stored procedure.
  【Key words】: Stored procedure; Database programming; Function; Relational database
  0  引言
  如何對数据、特别是规模巨大的数据进行管理一直是计算机应用的重要研究方向,其成果在科研、社会生活、商业应用的各个方面都有着巨大的影响[1]。为了培养合格的数据库[2]技术人才,国内多数大学都开设了数据库类的相关课程。伴随着大数据、云计算时代的到来,各类数据库软件的功能日益强大,用人单位对毕业生的数据库技术水平和实践能力也提出了越来越高的要求,如何更深入浅出地完成数据库的教学工作意义越来越重大[3-4]。
  存储过程[5]是数据库编程里极为重要的一环,但也是教学过程中非常难以处理的一环,因为存储过程(Stored Procedure)的定义和性质都是十分模糊不好直观描述的。多数教科书大多直接略过这个,
  有的则将其简单描述为一组语句的集合、以整体形式在数据库服务器端执行、经编译后存放在数据库服务器端[6]。这样的描述不仅难以让学生对存储过程产生直观的印象,也和函数的定义显得雷同,这就需要教师对存储过程的相关概念和原理进行深入的分析讲解,并进一步探讨存储过程的优点及适用性,使学生能够更好的理解这一部分的内容。
  1  存储过程的实质
  存储过程实质上就是能完成一定操作的大型数据库语句模块化的批处理,例如SQL、Oracle中的存储过程,最大的优点是经过服务器的第一次编译后被再次调用时不需要被再次编译,用户通过名字就可以直接调用存储过程,当然了,如果该存储过程带有参数还必须对参数赋值。
  在创建存储过程的时候,创建语句书写完毕提交后DBMS会进行保存,但创建过程并没有真的完成。必须等到程序第一次被执行,DBMS对其优化并将查询计划编译后缓存到系统上,整个存储过程才算真的建立。以后再运行存储过程时,系统不必去重新创建一个新的查询计划而是直接使用缓存中的查询计划。有特殊要求时需要通过使用WITH RECOMPILE选项人工指定。这意味着每次使用创建好的存储过程时都会跳过很多优化和编译工作从而节省时间。确切节省的时间量取决于批处理程序的复杂程度、批处理中表的大小、每个表上索引的数量等多个因素。对于简单的任务来说节省的时间往往不可能很多,尤其是在课堂教学实例这种极其简单的任务里,有时甚至会让学生觉得更加麻烦,产生一种效率更低的错觉。但对于大型任务来说,节省的时间就显得十分重要了,即使每次只能节省1秒或更少,但通过百分比可以计算出区别(比如1秒比2秒就快了100%)。特别当需要进行多次调用时或针对循环的情况,这一区别就会变得更加明显。
  2  对存储过程和函数进行区分
  与存储过程类似,数据库中的函数也是为了可重复执行操作数据库语句的集合,两者虽然有一定的相似性,但是还存在许多不同之处。在课堂上通过对这些区别的分析和总结,使学生可以更好的区分这两个容易混淆的知识点。
  (1)标识符不同:函数的标识符为FUNCTION;存储过程为PROCEDURE。
  (2)参数的使用不同:存储过程的参数分类比较多,分为输入参数、输出参数、可输入输出的参数[7];而函数只有输入参数这一种形式。   (3)返回值不同:存储过程的返回值,可以有多个值,并且可以返回参数;函数的返回值,只能有一个值,且只能返回表对象或者值,不能返回参数。
  (4)调用方式:函数的调用方式单一,而存储过程的调用方式比较灵活,有多种调用方式。
  (5)从使用上来说:函数的使用限制比存储过程要多,如不能用临时表、只能用表变量等。
  (6)从实现的功能上说:相对简单但针对性比较强的功能利用函数实现比较有优势,而实现比较复杂的功能用存储过程更有优势。
  (7)从灵活性上来说:函数多数时候作为查询语句的一个部分来调用,位于FROM关键字的后面,而存储过程一般是作为一个独立的部分来执行。
  3  深入分析存储过程的优点
  由于多数课本对于存储过程的优点都是简略的一笔带过,这就造成学生不能从这简单的描述里明白存储过程的优点到底在哪里,从而无法激发学习的热情,更不能在编程中充分利用存储过程的这些优点来解决问题。要想达到良好的教学效果,就必须解开学生心中的疑惑,给学生深入的分析存储过程的优点:
  (1)存储过程在编程上的独立性
  这一点几乎所有的教科书上都没有指出,课内实验因为过于简单也不能体现,极易被忽视,但却是存储过程最重要的优势。其原理是对用户而言,编写应用程序源代码的时候只需要输入存储过程的调用语句即可,并不接触存储过程服务器后台的具体语句。维护数据库的专业人员可随时在后台对存储过程进行修改,只要用于连接的名称和参数不受影响,则对用户的源代码毫无影响,从而极大地提高了程序的可移植性。
  (2)使用存储过程能够提高程序的执行效率
  如果一个程序的数据库操作包含大量的Transaction-SQL代码或需要被多次执行,那么使用存储过程要比一般的批处理有效率的多。因为批处理只是数据库语句的简单组合,每次被运行时DBMS都要对其重新进行编译和优化,而存储过程的最大特点就是预编译,执行时所有需要的分析、优化都在第一次被执行的时候由查询优化器完成并存在系统表中,以后再被调用时省去了优化这个耗时的步骤执行速度自然很快。
  (3)使用存储过程能够节约网络流量
  这一点单靠学生自己是很难理解的,因为他们在学校的实验里几乎不可能接触到这一块的,需要老师进行说明。以SQLsever的教学为例,用户程序对数据库对象进行的操作如查询、修改等,每一步都得传输对应的SQL语句来实现[8],而如果将相对固定的操作利用存储过程模块化,那么当用户需要实现这些操作时,只需要一条传输调用该存储过程的语句就可以让DBMS实现所有的这些操作了。当用户数量比较多或者操作步骤比较复杂的时候,需要流量的差距就会十分巨大。
  (4)可以利用存储过程提升数据库的安全性
  因为存储过程的便利性,很多外部程序中的操作都是利用定义在数据库服务器里的存储过程來运行的,系统管理员在对用户进行角色授权的时候对执行存储过程的权限进行区分,使得只有拥有对应角色的用户才能执行响应的存储过程,减少了非授权用户越过权限对数据进行访问的风险,从而保证数据的安全。
  4  探讨存储过程的适用性
  存储过程的优点虽然突出,但是局限性也很大,并不是什么地方都适合采用存储过程的,当学生理解了存储过程的优点和使用方法之后,可能会过多的使用存储过程,这时就需要和学生进一步探讨存储过程的适用性,以达到恰当使用的目的。通过和学生进行课堂讨论和举例分析,结论如下:
  (1)使用存储过程的程序往往需要专门的数据库开发人员进行维护,但实际情况是用户很难做到这一点。因为多数用户并没有特定的数据库开发人员,而是由普通程序员兼职进行数据库操作的,这些普通程序员往往只会操作程序完成数据访问,没有足够的培训在数据库上进行开发,这就造成了应用上的不方便。
  (2)设计逻辑需要变更时,修改存储过程比直接修改SQL语句[9-10]要麻烦的多,所以项目需求如果变动比较频繁时,不建议使用存储过程进行编程。例如大型互联网企业淘宝、知乎、微博等,多用PC服务器支撑,用户量的增速是不可控的,同时在线访问的用户量也是不可控的,这对数据库的压力是非常大的,这就需要把业务逻辑放到其他语言的代码层,从而可以借助一些软硬件上的调配来让负载均衡、平滑Web层的服务器来支持大规模的访问,这种时候如果大量用存储过程编程显然是一件相当冒险的事。
  (3)在一些对高效率或者规范性要求比较高的项目编程中,以及一些对于算法要求比较高或者涉及多条数据逻辑的地方,则适用于运用存储过程来解决问题。
  5  结论
  本文讨论了在教学过程中如何更加深入的探讨存储过程的实质、优点和适用性,并分析了存储过程与函数的区别。这些问题的澄清和解决有助于学生更好的理解存储过程,激发学生对数据库学习的热情。
  参考文献
  [1] 张义兰, 李大学. FOXBASE数据库及其应用. 复旦大学出版社, 1995.
  [2] 萨师煊, 王姗. 数据库系统概论第五版[M]. 北京: 高等教育出版社, 2013.
  [3] 陈晓燕, 张鲲. 数据库系统原理课程教学改革探索[J]. 软件, 2018, 39(3): 102-105.
  [4] 谷伟, 陈莲君, 徐方勤. 产学模式在《数据库原理》课程教学改革中的应用[J]. 软件, 2012, 33(7): 153-155.
  [5] 马垣. 关系数据库理论[M]. 北京: 清华大学出版社, 1999.
  [6] 王贺朝. 电子商务与数据库应用. 东南大学出版社, 2002.
  [7] 周力. SQL Server 2000实用教程. 大连理工大学出版社, 2009.
  [8] 张鲲. 高校计算机专业数据库课程设计教学指导与实践研究[J]. 软件, 2012, 33(2): 84-86.
  [9] 刘芬. 关于SQL数据库的性能优化问题的研究[J]. 软件, 2012, 33(6): 139-141.
  [10] 何玉洁, 梁琦. 数据库原理与应用(第二版). 北京: 机械工业出版社, 2011.
其他文献
本文综述了多银行电子现金系统的研究情况,重点分析、比较了三个系统,最后指出了这些方案中存在的一些安全和效率问题,并简要介绍了目前这些问题的研究和解决情况.
现在,依靠奇妙创意和强有力执行团队得偿所愿的人,正在全球范围内不断增加着。而这个“所愿”有时大到超出个人想象的极限。比如,创建一家在纳斯达克上市的公司,它可以达到30
“前车之鉴”现任美国期货协会会员、加拿大多伦多股票交易所董事局顾问等多个职务的国际金融人士丁大卫,对发生中航油事件感到十分遗憾。他认为,中航油这样的事件是不应该发生
利用天津某地热供热项目供热系统为研究对象,通过对系统的熵分析,确定不可逆因素导致的做工能力损失和能量品质的下降,根据熵平衡式,计算系统内各个子过程的物流及熵产分布。
1信息技术1.1美国:量子计算机最耀眼,芯片研究成果再现2017年量子霸权的争夺趋热,谷歌和IBM展开“老大”地位之争。已推出9量子位计算机的谷歌4月宣布将在年底推出49量子位处
雪下了一夜,天亮时终于停了下来。整个城市都变成了银色的世界,沉浸在孤独的宁静里。罗风定定地望着窗外,恨不能寻见点什么,但路上连个脚印也没有。他转过身,看着屋子里满地的碎纸
我国既有建筑每年消耗大量能源,对不符合节能设计规范的既有建筑进行节能改造,是实现建筑节能目标最重要和最有效的方法之一。提出节能改造流程,并结合山东省某居住建筑节能改造
冷却技术对无锌花热镀锌板的生产具有极其重要的作用。对静电喷雾冷却关键技术进行了分析,静电喷雾冷却技术主要包括高压静电系统及喷射冷却系统。阐明了热镀锌板晶核的形成与
如何增加除语音之外的其它业务收入?如何将一个统一的真正的电信级网络拓展到企业及家庭应用,实现在统一的网络平台上为家庭、企业及手机用户提供电信级语音、数据和IPTV/HDTV服
奢侈品牌的背后都包含着一个生动的历史故事,万宝龙也不例外。在燕丝·罗斯勒(Jens R?sler)所著《万宝龙日记及收藏者指南》中, 记录着万宝龙的来历。万宝龙的品牌标志是