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