亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        數(shù)據(jù)庫(kù)中存儲(chǔ)過(guò)程教學(xué)探討

        2019-10-08 06:43:30楊武英馮志鑫
        軟件 2019年5期

        楊武英 馮志鑫

        摘 ?要: 數(shù)據(jù)庫(kù)多年來(lái)一直是計(jì)算機(jī)科學(xué)中重要的分支,有著十分廣泛的應(yīng)用。各個(gè)層次的工科學(xué)校都在多數(shù)專業(yè)里開(kāi)設(shè)了不同種類的數(shù)據(jù)庫(kù)課程,根據(jù)實(shí)際情況的不同一般都會(huì)采取適合自己學(xué)校的教學(xué)方法,對(duì)內(nèi)容有不同方向的側(cè)重。存儲(chǔ)過(guò)程的應(yīng)用是數(shù)據(jù)庫(kù)應(yīng)用中重要的一環(huán),如何在教學(xué)過(guò)程中把握它的難點(diǎn)與重點(diǎn)是一件十分困難的事情。為了解決這個(gè)問(wèn)題,進(jìn)行了深入的分析探討,以此來(lái)提高存儲(chǔ)過(guò)程的教學(xué)效果。

        關(guān)鍵詞: 存儲(chǔ)過(guò)程;數(shù)據(jù)庫(kù)編程;函數(shù);關(guān)系數(shù)據(jù)庫(kù)

        中圖分類號(hào): G642.4 ? ?文獻(xiàn)標(biāo)識(shí)碼: A ? ?DOI:10.3969/j.issn.1003-6970.2019.05.045

        本文著錄格式:楊武英,馮志鑫. 數(shù)據(jù)庫(kù)中存儲(chǔ)過(guò)程教學(xué)探討[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 ?引言

        如何對(duì)數(shù)據(jù)、特別是規(guī)模巨大的數(shù)據(jù)進(jìn)行管理一直是計(jì)算機(jī)應(yīng)用的重要研究方向,其成果在科研、社會(huì)生活、商業(yè)應(yīng)用的各個(gè)方面都有著巨大的影響[1]。為了培養(yǎng)合格的數(shù)據(jù)庫(kù)[2]技術(shù)人才,國(guó)內(nèi)多數(shù)大學(xué)都開(kāi)設(shè)了數(shù)據(jù)庫(kù)類的相關(guān)課程。伴隨著大數(shù)據(jù)、云計(jì)算時(shí)代的到來(lái),各類數(shù)據(jù)庫(kù)軟件的功能日益強(qiáng)大,用人單位對(duì)畢業(yè)生的數(shù)據(jù)庫(kù)技術(shù)水平和實(shí)踐能力也提出了越來(lái)越高的要求,如何更深入淺出地完成數(shù)據(jù)庫(kù)的教學(xué)工作意義越來(lái)越重大[3-4]。

        存儲(chǔ)過(guò)程[5]是數(shù)據(jù)庫(kù)編程里極為重要的一環(huán),但也是教學(xué)過(guò)程中非常難以處理的一環(huán),因?yàn)榇鎯?chǔ)過(guò)程(Stored Procedure)的定義和性質(zhì)都是十分模糊不好直觀描述的。多數(shù)教科書(shū)大多直接略過(guò)這個(gè),

        有的則將其簡(jiǎn)單描述為一組語(yǔ)句的集合、以整體形式在數(shù)據(jù)庫(kù)服務(wù)器端執(zhí)行、經(jīng)編譯后存放在數(shù)據(jù)庫(kù)服務(wù)器端[6]。這樣的描述不僅難以讓學(xué)生對(duì)存儲(chǔ)過(guò)程產(chǎn)生直觀的印象,也和函數(shù)的定義顯得雷同,這就需要教師對(duì)存儲(chǔ)過(guò)程的相關(guān)概念和原理進(jìn)行深入的分析講解,并進(jìn)一步探討存儲(chǔ)過(guò)程的優(yōu)點(diǎn)及適用性,使學(xué)生能夠更好的理解這一部分的內(nèi)容。

        1 ?存儲(chǔ)過(guò)程的實(shí)質(zhì)

        存儲(chǔ)過(guò)程實(shí)質(zhì)上就是能完成一定操作的大型數(shù)據(jù)庫(kù)語(yǔ)句模塊化的批處理,例如SQL、Oracle中的存儲(chǔ)過(guò)程,最大的優(yōu)點(diǎn)是經(jīng)過(guò)服務(wù)器的第一次編譯后被再次調(diào)用時(shí)不需要被再次編譯,用戶通過(guò)名字就可以直接調(diào)用存儲(chǔ)過(guò)程,當(dāng)然了,如果該存儲(chǔ)過(guò)程帶有參數(shù)還必須對(duì)參數(shù)賦值。

        在創(chuàng)建存儲(chǔ)過(guò)程的時(shí)候,創(chuàng)建語(yǔ)句書(shū)寫完畢提交后DBMS會(huì)進(jìn)行保存,但創(chuàng)建過(guò)程并沒(méi)有真的完成。必須等到程序第一次被執(zhí)行,DBMS對(duì)其優(yōu)化并將查詢計(jì)劃編譯后緩存到系統(tǒng)上,整個(gè)存儲(chǔ)過(guò)程才算真的建立。以后再運(yùn)行存儲(chǔ)過(guò)程時(shí),系統(tǒng)不必去重新創(chuàng)建一個(gè)新的查詢計(jì)劃而是直接使用緩存中的查詢計(jì)劃。有特殊要求時(shí)需要通過(guò)使用WITH RECOMPILE選項(xiàng)人工指定。這意味著每次使用創(chuàng)建好的存儲(chǔ)過(guò)程時(shí)都會(huì)跳過(guò)很多優(yōu)化和編譯工作從而節(jié)省時(shí)間。確切節(jié)省的時(shí)間量取決于批處理程序的復(fù)雜程度、批處理中表的大小、每個(gè)表上索引的數(shù)量等多個(gè)因素。對(duì)于簡(jiǎn)單的任務(wù)來(lái)說(shuō)節(jié)省的時(shí)間往往不可能很多,尤其是在課堂教學(xué)實(shí)例這種極其簡(jiǎn)單的任務(wù)里,有時(shí)甚至?xí)寣W(xué)生覺(jué)得更加麻煩,產(chǎn)生一種效率更低的錯(cuò)覺(jué)。但對(duì)于大型任務(wù)來(lái)說(shuō),節(jié)省的時(shí)間就顯得十分重要了,即使每次只能節(jié)省1秒或更少,但通過(guò)百分比可以計(jì)算出區(qū)別(比如1秒比2秒就快了100%)。特別當(dāng)需要進(jìn)行多次調(diào)用時(shí)或針對(duì)循環(huán)的情況,這一區(qū)別就會(huì)變得更加明顯。

        2 ?對(duì)存儲(chǔ)過(guò)程和函數(shù)進(jìn)行區(qū)分

        與存儲(chǔ)過(guò)程類似,數(shù)據(jù)庫(kù)中的函數(shù)也是為了可重復(fù)執(zhí)行操作數(shù)據(jù)庫(kù)語(yǔ)句的集合,兩者雖然有一定的相似性,但是還存在許多不同之處。在課堂上通過(guò)對(duì)這些區(qū)別的分析和總結(jié),使學(xué)生可以更好的區(qū)分這兩個(gè)容易混淆的知識(shí)點(diǎn)。

        (1)標(biāo)識(shí)符不同:函數(shù)的標(biāo)識(shí)符為FUNCTION;存儲(chǔ)過(guò)程為PROCEDURE。

        (2)參數(shù)的使用不同:存儲(chǔ)過(guò)程的參數(shù)分類比較多,分為輸入?yún)?shù)、輸出參數(shù)、可輸入輸出的參數(shù)[7];而函數(shù)只有輸入?yún)?shù)這一種形式。

        (3)返回值不同:存儲(chǔ)過(guò)程的返回值,可以有多個(gè)值,并且可以返回參數(shù);函數(shù)的返回值,只能有一個(gè)值,且只能返回表對(duì)象或者值,不能返回參數(shù)。

        (4)調(diào)用方式:函數(shù)的調(diào)用方式單一,而存儲(chǔ)過(guò)程的調(diào)用方式比較靈活,有多種調(diào)用方式。

        (5)從使用上來(lái)說(shuō):函數(shù)的使用限制比存儲(chǔ)過(guò)程要多,如不能用臨時(shí)表、只能用表變量等。

        (6)從實(shí)現(xiàn)的功能上說(shuō):相對(duì)簡(jiǎn)單但針對(duì)性比較強(qiáng)的功能利用函數(shù)實(shí)現(xiàn)比較有優(yōu)勢(shì),而實(shí)現(xiàn)比較復(fù)雜的功能用存儲(chǔ)過(guò)程更有優(yōu)勢(shì)。

        (7)從靈活性上來(lái)說(shuō):函數(shù)多數(shù)時(shí)候作為查詢語(yǔ)句的一個(gè)部分來(lái)調(diào)用,位于FROM關(guān)鍵字的后面,而存儲(chǔ)過(guò)程一般是作為一個(gè)獨(dú)立的部分來(lái)執(zhí)行。

        3 ?深入分析存儲(chǔ)過(guò)程的優(yōu)點(diǎn)

        由于多數(shù)課本對(duì)于存儲(chǔ)過(guò)程的優(yōu)點(diǎn)都是簡(jiǎn)略的一筆帶過(guò),這就造成學(xué)生不能從這簡(jiǎn)單的描述里明白存儲(chǔ)過(guò)程的優(yōu)點(diǎn)到底在哪里,從而無(wú)法激發(fā)學(xué)習(xí)的熱情,更不能在編程中充分利用存儲(chǔ)過(guò)程的這些優(yōu)點(diǎn)來(lái)解決問(wèn)題。要想達(dá)到良好的教學(xué)效果,就必須解開(kāi)學(xué)生心中的疑惑,給學(xué)生深入的分析存儲(chǔ)過(guò)程的優(yōu)點(diǎn):

        (1)存儲(chǔ)過(guò)程在編程上的獨(dú)立性

        這一點(diǎn)幾乎所有的教科書(shū)上都沒(méi)有指出,課內(nèi)實(shí)驗(yàn)因?yàn)檫^(guò)于簡(jiǎn)單也不能體現(xiàn),極易被忽視,但卻是存儲(chǔ)過(guò)程最重要的優(yōu)勢(shì)。其原理是對(duì)用戶而言,編寫應(yīng)用程序源代碼的時(shí)候只需要輸入存儲(chǔ)過(guò)程的調(diào)用語(yǔ)句即可,并不接觸存儲(chǔ)過(guò)程服務(wù)器后臺(tái)的具體語(yǔ)句。維護(hù)數(shù)據(jù)庫(kù)的專業(yè)人員可隨時(shí)在后臺(tái)對(duì)存儲(chǔ)過(guò)程進(jìn)行修改,只要用于連接的名稱和參數(shù)不受影響,則對(duì)用戶的源代碼毫無(wú)影響,從而極大地提高了程序的可移植性。

        (2)使用存儲(chǔ)過(guò)程能夠提高程序的執(zhí)行效率

        如果一個(gè)程序的數(shù)據(jù)庫(kù)操作包含大量的Transaction-SQL代碼或需要被多次執(zhí)行,那么使用存儲(chǔ)過(guò)程要比一般的批處理有效率的多。因?yàn)榕幚碇皇菙?shù)據(jù)庫(kù)語(yǔ)句的簡(jiǎn)單組合,每次被運(yùn)行時(shí)DBMS都要對(duì)其重新進(jìn)行編譯和優(yōu)化,而存儲(chǔ)過(guò)程的最大特點(diǎn)就是預(yù)編譯,執(zhí)行時(shí)所有需要的分析、優(yōu)化都在第一次被執(zhí)行的時(shí)候由查詢優(yōu)化器完成并存在系統(tǒng)表中,以后再被調(diào)用時(shí)省去了優(yōu)化這個(gè)耗時(shí)的步驟執(zhí)行速度自然很快。

        (3)使用存儲(chǔ)過(guò)程能夠節(jié)約網(wǎng)絡(luò)流量

        這一點(diǎn)單靠學(xué)生自己是很難理解的,因?yàn)樗麄冊(cè)趯W(xué)校的實(shí)驗(yàn)里幾乎不可能接觸到這一塊的,需要老師進(jìn)行說(shuō)明。以SQLsever的教學(xué)為例,用戶程序?qū)?shù)據(jù)庫(kù)對(duì)象進(jìn)行的操作如查詢、修改等,每一步都得傳輸對(duì)應(yīng)的SQL語(yǔ)句來(lái)實(shí)現(xiàn)[8],而如果將相對(duì)固定的操作利用存儲(chǔ)過(guò)程模塊化,那么當(dāng)用戶需要實(shí)現(xiàn)這些操作時(shí),只需要一條傳輸調(diào)用該存儲(chǔ)過(guò)程的語(yǔ)句就可以讓DBMS實(shí)現(xiàn)所有的這些操作了。當(dāng)用戶數(shù)量比較多或者操作步驟比較復(fù)雜的時(shí)候,需要流量的差距就會(huì)十分巨大。

        (4)可以利用存儲(chǔ)過(guò)程提升數(shù)據(jù)庫(kù)的安全性

        因?yàn)榇鎯?chǔ)過(guò)程的便利性,很多外部程序中的操作都是利用定義在數(shù)據(jù)庫(kù)服務(wù)器里的存儲(chǔ)過(guò)程來(lái)運(yùn)行的,系統(tǒng)管理員在對(duì)用戶進(jìn)行角色授權(quán)的時(shí)候?qū)?zhí)行存儲(chǔ)過(guò)程的權(quán)限進(jìn)行區(qū)分,使得只有擁有對(duì)應(yīng)角色的用戶才能執(zhí)行響應(yīng)的存儲(chǔ)過(guò)程,減少了非授權(quán)用戶越過(guò)權(quán)限對(duì)數(shù)據(jù)進(jìn)行訪問(wèn)的風(fēng)險(xiǎn),從而保證數(shù)據(jù)的安全。

        4 ?探討存儲(chǔ)過(guò)程的適用性

        存儲(chǔ)過(guò)程的優(yōu)點(diǎn)雖然突出,但是局限性也很大,并不是什么地方都適合采用存儲(chǔ)過(guò)程的,當(dāng)學(xué)生理解了存儲(chǔ)過(guò)程的優(yōu)點(diǎn)和使用方法之后,可能會(huì)過(guò)多的使用存儲(chǔ)過(guò)程,這時(shí)就需要和學(xué)生進(jìn)一步探討存儲(chǔ)過(guò)程的適用性,以達(dá)到恰當(dāng)使用的目的。通過(guò)和學(xué)生進(jìn)行課堂討論和舉例分析,結(jié)論如下:

        (1)使用存儲(chǔ)過(guò)程的程序往往需要專門的數(shù)據(jù)庫(kù)開(kāi)發(fā)人員進(jìn)行維護(hù),但實(shí)際情況是用戶很難做到這一點(diǎn)。因?yàn)槎鄶?shù)用戶并沒(méi)有特定的數(shù)據(jù)庫(kù)開(kāi)發(fā)人員,而是由普通程序員兼職進(jìn)行數(shù)據(jù)庫(kù)操作的,這些普通程序員往往只會(huì)操作程序完成數(shù)據(jù)訪問(wèn),沒(méi)有足夠的培訓(xùn)在數(shù)據(jù)庫(kù)上進(jìn)行開(kāi)發(fā),這就造成了應(yīng)用上的不方便。

        (2)設(shè)計(jì)邏輯需要變更時(shí),修改存儲(chǔ)過(guò)程比直接修改SQL語(yǔ)句[9-10]要麻煩的多,所以項(xiàng)目需求如果變動(dòng)比較頻繁時(shí),不建議使用存儲(chǔ)過(guò)程進(jìn)行編程。例如大型互聯(lián)網(wǎng)企業(yè)淘寶、知乎、微博等,多用PC服務(wù)器支撐,用戶量的增速是不可控的,同時(shí)在線訪問(wèn)的用戶量也是不可控的,這對(duì)數(shù)據(jù)庫(kù)的壓力是非常大的,這就需要把業(yè)務(wù)邏輯放到其他語(yǔ)言的代碼層,從而可以借助一些軟硬件上的調(diào)配來(lái)讓負(fù)載均衡、平滑Web層的服務(wù)器來(lái)支持大規(guī)模的訪問(wèn),這種時(shí)候如果大量用存儲(chǔ)過(guò)程編程顯然是一件相當(dāng)冒險(xiǎn)的事。

        (3)在一些對(duì)高效率或者規(guī)范性要求比較高的項(xiàng)目編程中,以及一些對(duì)于算法要求比較高或者涉及多條數(shù)據(jù)邏輯的地方,則適用于運(yùn)用存儲(chǔ)過(guò)程來(lái)解決問(wèn)題。

        5 ?結(jié)論

        本文討論了在教學(xué)過(guò)程中如何更加深入的探討存儲(chǔ)過(guò)程的實(shí)質(zhì)、優(yōu)點(diǎn)和適用性,并分析了存儲(chǔ)過(guò)程與函數(shù)的區(qū)別。這些問(wèn)題的澄清和解決有助于學(xué)生更好的理解存儲(chǔ)過(guò)程,激發(fā)學(xué)生對(duì)數(shù)據(jù)庫(kù)學(xué)習(xí)的熱情。

        參考文獻(xiàn)

        [1] 張義蘭, 李大學(xué). FOXBASE數(shù)據(jù)庫(kù)及其應(yīng)用. 復(fù)旦大學(xué)出版社, 1995.

        [2] 薩師煊, 王姍. 數(shù)據(jù)庫(kù)系統(tǒng)概論第五版[M]. 北京: 高等教育出版社, 2013.

        [3] 陳曉燕, 張?chǎng)H. 數(shù)據(jù)庫(kù)系統(tǒng)原理課程教學(xué)改革探索[J]. 軟件, 2018, 39(3): 102-105.

        [4] 谷偉, 陳蓮君, 徐方勤. 產(chǎn)學(xué)模式在《數(shù)據(jù)庫(kù)原理》課程教學(xué)改革中的應(yīng)用[J]. 軟件, 2012, 33(7): 153-155.

        [5] 馬垣. 關(guān)系數(shù)據(jù)庫(kù)理論[M]. 北京: 清華大學(xué)出版社, 1999.

        [6] 王賀朝. 電子商務(wù)與數(shù)據(jù)庫(kù)應(yīng)用. 東南大學(xué)出版社, 2002.

        [7] 周力. SQL Server 2000實(shí)用教程. 大連理工大學(xué)出版社, 2009.

        [8] 張?chǎng)H. 高校計(jì)算機(jī)專業(yè)數(shù)據(jù)庫(kù)課程設(shè)計(jì)教學(xué)指導(dǎo)與實(shí)踐研究[J]. 軟件, 2012, 33(2): 84-86.

        [9] 劉芬. 關(guān)于SQL數(shù)據(jù)庫(kù)的性能優(yōu)化問(wèn)題的研究[J]. 軟件, 2012, 33(6): 139-141.

        [10] 何玉潔, 梁琦. 數(shù)據(jù)庫(kù)原理與應(yīng)用(第二版). 北京: 機(jī)械工業(yè)出版社, 2011.

        欧美肥胖老妇做爰videos| 中文字幕在线乱码日本| 青青草精品在线视频观看| 日韩放荡少妇无码视频| 亚洲AV无码一区二区三区日日强| 日韩少妇无码一区二区免费视频| 日韩极品在线观看视频| 久久久久88色偷偷| 亚洲av无码男人的天堂在线| 国产精品无码久久久久久蜜臀AV| 一本色道久久88加勒比—综合| 精品人妻一区二区三区四区在线| 中文字幕亚洲情99在线| 揄拍成人国产精品视频肥熟女| 日韩精品人妻一区二区三区蜜桃臀| 女人被狂躁的高潮免费视频| 亚洲处破女av日韩精品| 91精品国产91| 丝袜美腿诱惑区在线播放| 亚洲国产精品无码久久久| 久久久久99精品国产片| 国产小车还是日产的好| 东北熟妇露脸25分钟| 国产成人a人亚洲精品无码| 成人毛片18女人毛片免费| 久久五月精品中文字幕| 久久婷婷五月综合色奶水99啪| 99久久人人爽亚洲精品美女| 久久夜色精品国产亚洲噜噜 | 久久精品aⅴ无码中文字字幕| 久久久久久久女国产乱让韩| 午夜av内射一区二区三区红桃视| 熟女人妻在线中文字幕| 无码中文字幕免费一区二区三区 | 在线观看热码亚洲av每日更新| 日本污视频| 国产精品一区二区三区三| 亚洲精品无码专区在线在线播放 | 国产精品久久久久精品一区二区| 国产又爽又黄的激情精品视频| 中文字幕日本韩国精品免费观看|