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