何小衛(wèi),葉榮華
(浙江師范大學 數(shù)學與計算機科學學院,浙江 金華 321004)
數(shù)據(jù)庫課程教學是大學本科甚至研究生階段計算機應用技術的一個重要環(huán)節(jié),扎實掌握數(shù)據(jù)庫相關技術是計算機科學、軟件工程等專業(yè)畢業(yè)生的必備技能?,F(xiàn)行的數(shù)據(jù)庫原理及應用教材內(nèi)容比較偏重于對數(shù)據(jù)庫原理的理論性說明[1],而對數(shù)據(jù)庫的實踐環(huán)節(jié)敘述大多數(shù)相對簡單,造成學生在學習過程中更多地學習理論知識本身,卻忽視了這些理論知識的實際應用。事實上,本科的數(shù)據(jù)庫課程是后續(xù)web應用開發(fā)、軟件工程等課程的先修課程[2],是軟件工程方向的基礎課程,特別需要學生扎實掌握數(shù)據(jù)庫的實踐技能[3]。根據(jù)多年來這門課程的教學經(jīng)歷,我們認為課程教學方法上存在以下一些問題。
(1)實驗課程學時安排偏少,內(nèi)容簡單。大多數(shù)本科階段使用的數(shù)據(jù)庫教材在內(nèi)容的安排上,比較注重理論知識的完整性,一般都具有數(shù)據(jù)庫概述、關系數(shù)據(jù)庫、SQL語言、事務、并發(fā)控制、數(shù)據(jù)庫恢復技術、關系數(shù)據(jù)理論、數(shù)據(jù)概念模型(ER、EER)、關系數(shù)據(jù)模型、關系數(shù)據(jù)庫設計方法等相關章節(jié),其中大部分內(nèi)容偏向理論敘述,實踐內(nèi)容的安排普遍偏少且簡單,在要求學生熟悉實驗平臺基本操作基礎上,SQL語言的應用要求比較低,即使學生完成了實驗內(nèi)容,離實際應用的要求還是相差甚遠。
(2)教學實施過程中教學內(nèi)容的選擇完全以選定的教材內(nèi)容作為依據(jù)。在實施本科階段數(shù)據(jù)庫課程的教學中,通常會以選定一本教材作為組織教學的依據(jù);而事實上,很少有教材能夠滿足理論與實踐合理搭配的需求,特別是不能滿足實踐上的教學需求,往往除了基本的SQL實驗以外,很少安排存儲過程、觸發(fā)器、游標等內(nèi)容的設計;更缺少嵌入高級語言中的使用、基于web的數(shù)據(jù)庫應用、DBMS的高級應用、DBMS高級主題等實驗的安排。
(3)缺乏把理論與實踐環(huán)節(jié)有機結合的教學機制。數(shù)據(jù)庫課程的基本概念很多,實際上死記硬背這些基本概念是沒有用的,必須在實踐中讓學生體會到這些概念的作用才能徹底理解,需要設計合適的實驗用以體現(xiàn)基本概念、原理的作用,比如主鍵、外鍵、check約束、View、Null、Unique、索引、ER model、存儲過程、觸發(fā)器、游標、事務、并發(fā)控制、數(shù)據(jù)備份與恢復、主從復制等,這些基本概念如何在實驗中得以體現(xiàn),在教學過程中需要去設計相關實驗,使學生在實踐過程中就能很好地理解它們。
(4)缺乏有效的、動態(tài)的實驗考核方法。當前數(shù)據(jù)庫課程的實驗除了內(nèi)容簡單、離實用相差大以外,對于實驗的考核主要是查看學生提交的實驗報告。事實上,學生提交的實驗報告基本上是針對老師安排內(nèi)容的實驗過程和結果,而老師安排的實驗內(nèi)容相對固定,所以學生所做實驗的過程與結果雷同,但是具體做的過程中,不同學生解決這些問題的速度、能力的考核很難從實驗報告上精確地體現(xiàn)出來,所以非常需要有一種有效的動態(tài)考核方法。
(5)缺少培養(yǎng)學生不斷深入學習的內(nèi)容引導。當前本科階段數(shù)據(jù)庫課程的課時安排通常為每周4課時或3課時,而其中實驗課時通常最多占三分之一,光靠本科階段的這些課時顯然不能滿足學生工作前的學習課時要求,而教學過程中往往僅介紹關系數(shù)據(jù)庫技術。隨著數(shù)據(jù)庫技術的不斷發(fā)展,非關系數(shù)據(jù)庫系統(tǒng)如MongoDB、HadoopDB等[4-6]以及BlockChain系統(tǒng)(如以太坊、Hyperledger Fabric),均為當前新的數(shù)據(jù)管理技術框架,需要教師根據(jù)實際情況制訂數(shù)據(jù)庫課程系列的整體學習框架,至少能夠花少量的課時介紹這些最新的技術,能滿足學生學完本科階段課程以后2~3年后續(xù)學習內(nèi)容的推薦,或者研究生階段的課程內(nèi)容學習。
數(shù)據(jù)管理技術當前處于一個多種技術共存的時期,見圖1,關系數(shù)據(jù)庫仍然是主導的數(shù)據(jù)庫技術,Nosql數(shù)據(jù)庫和去中心化的數(shù)據(jù)管理技術的發(fā)展也非常迅猛,所以作為擔任數(shù)據(jù)庫相關課程的任課老師,在教學內(nèi)容和教學形式上也需要與時俱進,不斷調(diào)整數(shù)據(jù)庫課程的教學內(nèi)容特別是實驗內(nèi)容,使學生畢業(yè)以后能夠適合社會在這方面的技能需求。根據(jù)近年來筆者從事本科、研究生階段數(shù)據(jù)庫課程的教學實踐,課程分為基礎實驗、遞進實驗、高級主題實驗3個實驗模塊,其中前兩個模塊為本科階段安排的內(nèi)容,而高級主題實驗為學生進一步學習的內(nèi)容。通過前兩個模塊的學習和實踐,學生能夠深刻理解數(shù)據(jù)庫課程中的基本概念與原理,從而牢固掌握它們;數(shù)據(jù)庫技術高級主題包括SQL語句防注入技術、查詢優(yōu)化技術、高性能索引技術、讀寫分離技術、分區(qū)分表技術、主從復制技術等,學生在工作之前掌握這些內(nèi)容,無疑會給就業(yè)的崗位層次帶來顯著的提升。
圖1 數(shù)據(jù)管理技術現(xiàn)狀
當前關系數(shù)據(jù)庫仍然是主流的,涉及的知識點有數(shù)據(jù)庫安全性、數(shù)據(jù)庫基本概念(數(shù)據(jù)、數(shù)據(jù)庫DB、DBMS、DBS、模式結構)、關系結構(關系、元組、屬性、超鍵、鍵、數(shù)據(jù)類型)、鍵(候選鍵、主鍵、外鍵)、數(shù)據(jù)完整性約束(實體完整性、參照完整性、用戶定義完整性,包括數(shù)據(jù)類型定義、null、Check約束、Unique約束等)、基 礎 SQL 語 言(Select、 Insert、Update、Delete、Create Table、Alter Table、Drop Table)、數(shù)據(jù)庫安全性管理(用戶管理、授權管理、角色管理)、數(shù)據(jù)庫特殊機制(存儲過程、觸發(fā)器、游標)、事務、并發(fā)控制、數(shù)據(jù)庫恢復、關系數(shù)據(jù)理論(函數(shù)依賴、范式理論、關系分解)、ER設計與數(shù)據(jù)庫設計等[5]。圖2是關系數(shù)據(jù)庫的主要知識點及相互關系圖,除了關系數(shù)據(jù)理論、ER模型設計以外,其他概念與內(nèi)容均可以直接安排進實驗。比如,對于關系結構(關系、元組、屬性、超鍵、鍵、數(shù)據(jù)類型)、鍵(候選鍵、主鍵、外鍵)、數(shù)據(jù)完整性約束(實體完整性、參照完整性、用戶定義完整性(包括數(shù)據(jù)類型定義、null、Check約束、Unique約束等)這部分內(nèi)容可以通過設計2~3個帶各種約束的Table創(chuàng)建來覆蓋所有涉及的知識點,并設計其他的操作來驗證約束的有效性;對于SQL語言的查詢語句需要設計各個類型的問題,涉及select語句的各種條件的使用和group by、order by子句的使用; 對于事務、并發(fā)控制等內(nèi)容可以設計模擬多用戶情形,結合封鎖機制來實現(xiàn)并發(fā)控制的效果;而對于數(shù)據(jù)庫安全性,可以設計一具體的應用場景,讓學生根據(jù)不同用戶使用某一數(shù)據(jù)庫的場景,要求學生使用用戶管理、授權、角色等相關操作設計安全性的解決方案。綜上所述,設計若干基礎性和綜合性實驗來覆蓋關系數(shù)據(jù)庫中所涉及的重要概念,通過完成這些實驗,不但讓學生能夠熟練掌握實驗技能,而且使學生對于重要概念有深刻的理解,與去背誦這些概念所達到的學習效果是完全不同的;對于實驗考核,考慮安排新的題庫隨機考核學生的掌握情況。
完成基礎性實驗之后,在基于高級語言的純代碼數(shù)據(jù)庫訪問、基于Web的數(shù)據(jù)庫應用設計兩個方面,需要設計相關的綜合性實驗??紤]到本科階段后續(xù)會開設Web應用相關的課程,必然會學習如何在Web頁面訪問關系數(shù)據(jù)庫數(shù)據(jù),所以這部分內(nèi)容在課時緊張的情況下可以讓學生在Web應用課程的時候再去學習,當然可以鼓勵學生課后去嘗試如何在Web應用中使用數(shù)據(jù)庫技術,要求學生根據(jù)某個具體應用場景,完成基于某個角色的一組功能,比如在成績管理系統(tǒng)中的教師成績錄入、修改、查詢統(tǒng)計頁面功能,包括動態(tài)頁面設計、JS代碼、數(shù)據(jù)庫訪問等,但不限于用什么開發(fā)平臺、語言和使用的框架。
基于高級語言的純代碼(比如Java)的綜合實驗,要求學生能夠完成基于高級語言的純代碼方式連接、訪問關系數(shù)據(jù)庫,如果完全由學生去完成所有的代碼可能有一定的困難,所以在設計這個綜合性實驗的時候可以嘗試給出簡單的代碼框架和簡單demo,可以使學生根據(jù)不同的實驗需求快速模仿數(shù)據(jù)庫訪問的相關代碼。
在本科階段能夠完成以上兩個部分實驗,應該會得到不錯的教學效果,但是僅僅如此對于即將走向社會從事計算機軟件研發(fā)相關工作的學生來說還是不夠的,還缺乏對數(shù)據(jù)庫領域一些高級主題的應用,比如SQL語句防注入技術、查詢優(yōu)化技術、讀寫分離技術、分區(qū)分表技術、主從復制技術等,而這些內(nèi)容對于未來從事數(shù)據(jù)庫管理員和研發(fā)的學生尤為重要,事實上也成為市場上數(shù)據(jù)庫方面高端人才層次中最重要的要求,能夠熟練掌握這些數(shù)據(jù)庫高級技術的人才也成為市場上的香餑餑,薪資水平會在普通數(shù)據(jù)庫人才的基礎上有一個非常明顯的提升,甚至幾倍的水平。
雖然在本科階段的數(shù)據(jù)庫課程中一般不會要求學生進行這些高級主題的技能訓練,但由于這部分內(nèi)容在高層次數(shù)據(jù)庫人才角色中的重要性,所以對于本科階段的優(yōu)秀學生或者研究生階段的學生需要引導他們?nèi)ナ煜み@些高級數(shù)據(jù)庫技術,針對不同的主題設計合適的綜合性實驗或者課程設計,通過這些實驗的訓練,學生能夠深刻理解這些主題相關技術的目的、措施、效果,把這部分優(yōu)秀的學生訓練為具有高級數(shù)據(jù)庫技能的潛在專家。
雖然當前最流行的數(shù)據(jù)管理技術還是關系數(shù)據(jù)庫,但是Oracle、Sql server、Mysql這些商用產(chǎn)品無一例外都是中心化的數(shù)據(jù)管理模式,數(shù)據(jù)類型比較傳統(tǒng),比如數(shù)值、字符串、日期時間等;隨著互聯(lián)網(wǎng)環(huán)境下數(shù)據(jù)類型的多樣性和數(shù)據(jù)分析任務的需要增長,關系數(shù)據(jù)庫的關鍵特性包括完善的事務機制和高效的查詢機制這兩個引以為傲的關鍵特性,到了Web2.0時代卻成了雞肋,因為Web2.0網(wǎng)站系統(tǒng)通常不要求嚴格的數(shù)據(jù)庫事務、不要求嚴格的讀寫實時性、不包含大量復雜的SQL查詢,可以考慮選用NoSQL數(shù)據(jù)庫,比如Redis、HadoopDB、MongoDB等。關系數(shù)據(jù)庫和NoSQL數(shù)據(jù)庫各有優(yōu)缺點,彼此無法完全取代。電信、銀行等領域的關鍵業(yè)務系統(tǒng),需要保證強事務一致性,仍然需要使用關系數(shù)據(jù)庫;而互聯(lián)網(wǎng)企業(yè)、傳統(tǒng)企業(yè)的非關鍵業(yè)務(比如數(shù)據(jù)分析)可以使用NoSQL數(shù)據(jù)庫。最新的NoSQL數(shù)據(jù)庫,也是大數(shù)據(jù)方向的工具,引導學生后續(xù)學習或者開設相關的課程,對于學生以后走向工作崗位也是非常有好處的。去中心化的數(shù)據(jù)管理技術(如區(qū)塊鏈技術)也是近兩年發(fā)展非常迅速的方向,涌現(xiàn)出了以太坊、Hyperleder Fabric等著名系統(tǒng),值得我們及時關注和研究,有可能的話也可用其設計入門級的實驗。
目前主流的關系數(shù)據(jù)庫分為基礎性實驗、遞進實驗、高級數(shù)據(jù)庫主題實驗,其中本科階段學生必須完成基礎性實驗并至少選做遞進實驗中的一部分;還可以設計相關的高級主題實驗引導學生后續(xù)學習或者在研究生階段的學習,包括在NoSQL數(shù)據(jù)庫上和區(qū)塊鏈上的實驗安排。