• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      數(shù)據(jù)庫中存儲過程教學探討

      2019-10-08 06:43:30楊武英馮志鑫
      軟件 2019年5期
      關鍵詞:關系數(shù)據(jù)庫函數(shù)

      楊武英 馮志鑫

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

      關鍵詞: 存儲過程;數(shù)據(jù)庫編程;函數(shù);關系數(shù)據(jù)庫

      中圖分類號: G642.4 ? ?文獻標識碼: A ? ?DOI:10.3969/j.issn.1003-6970.2019.05.045

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

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

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

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

      1 ?存儲過程的實質

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

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

      2 ?對存儲過程和函數(shù)進行區(qū)分

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

      (1)標識符不同:函數(shù)的標識符為FUNCTION;存儲過程為PROCEDURE。

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

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

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

      (5)從使用上來說:函數(shù)的使用限制比存儲過程要多,如不能用臨時表、只能用表變量等。

      (6)從實現(xiàn)的功能上說:相對簡單但針對性比較強的功能利用函數(shù)實現(xiàn)比較有優(yōu)勢,而實現(xiàn)比較復雜的功能用存儲過程更有優(yōu)勢。

      (7)從靈活性上來說:函數(shù)多數(shù)時候作為查詢語句的一個部分來調用,位于FROM關鍵字的后面,而存儲過程一般是作為一個獨立的部分來執(zhí)行。

      3 ?深入分析存儲過程的優(yōu)點

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

      (1)存儲過程在編程上的獨立性

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

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

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

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

      這一點單靠學生自己是很難理解的,因為他們在學校的實驗里幾乎不可能接觸到這一塊的,需要老師進行說明。以SQLsever的教學為例,用戶程序對數(shù)據(jù)庫對象進行的操作如查詢、修改等,每一步都得傳輸對應的SQL語句來實現(xiàn)[8],而如果將相對固定的操作利用存儲過程模塊化,那么當用戶需要實現(xiàn)這些操作時,只需要一條傳輸調用該存儲過程的語句就可以讓DBMS實現(xiàn)所有的這些操作了。當用戶數(shù)量比較多或者操作步驟比較復雜的時候,需要流量的差距就會十分巨大。

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

      因為存儲過程的便利性,很多外部程序中的操作都是利用定義在數(shù)據(jù)庫服務器里的存儲過程來運行的,系統(tǒng)管理員在對用戶進行角色授權的時候對執(zhí)行存儲過程的權限進行區(qū)分,使得只有擁有對應角色的用戶才能執(zhí)行響應的存儲過程,減少了非授權用戶越過權限對數(shù)據(jù)進行訪問的風險,從而保證數(shù)據(jù)的安全。

      4 ?探討存儲過程的適用性

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

      (1)使用存儲過程的程序往往需要專門的數(shù)據(jù)庫開發(fā)人員進行維護,但實際情況是用戶很難做到這一點。因為多數(shù)用戶并沒有特定的數(shù)據(jù)庫開發(fā)人員,而是由普通程序員兼職進行數(shù)據(jù)庫操作的,這些普通程序員往往只會操作程序完成數(shù)據(jù)訪問,沒有足夠的培訓在數(shù)據(jù)庫上進行開發(fā),這就造成了應用上的不方便。

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

      (3)在一些對高效率或者規(guī)范性要求比較高的項目編程中,以及一些對于算法要求比較高或者涉及多條數(shù)據(jù)邏輯的地方,則適用于運用存儲過程來解決問題。

      5 ?結論

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

      參考文獻

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

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

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

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

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

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

      [7] 周力. SQL Server 2000實用教程. 大連理工大學出版社, 2009.

      [8] 張鯤. 高校計算機專業(yè)數(shù)據(jù)庫課程設計教學指導與實踐研究[J]. 軟件, 2012, 33(2): 84-86.

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

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

      猜你喜歡
      關系數(shù)據(jù)庫函數(shù)
      關系數(shù)據(jù)庫在高爐數(shù)據(jù)采集系統(tǒng)中的應用
      山東冶金(2022年2期)2022-08-08 01:51:30
      第3講 “函數(shù)”復習精講
      二次函數(shù)
      第3講 “函數(shù)”復習精講
      二次函數(shù)
      函數(shù)備考精講
      關系數(shù)據(jù)庫技術在計算機網(wǎng)絡設計中的應用
      第3講“函數(shù)”復習精講
      計算機網(wǎng)絡設計中關系數(shù)據(jù)庫技術的應用
      基于索引結構的關系數(shù)據(jù)庫關鍵詞檢索
      桦南县| 汉阴县| 商都县| 西安市| 米脂县| 乐安县| 砀山县| 桐乡市| 京山县| 醴陵市| 永川市| 南岸区| 房产| 台南市| 河池市| 车险| 迁西县| 廉江市| 怀宁县| 盐津县| 青海省| 奉节县| 南丰县| 明水县| 都江堰市| 稻城县| 综艺| 公主岭市| 河北区| 元江| 万载县| 清流县| 青冈县| 太和县| 柘城县| 临泉县| 安化县| 陆川县| 延吉市| 通榆县| 五莲县|