周洪偉,原錦輝,胡浩,柯志鵬,張玉臣
(信息工程大學(xué),河南 鄭州)
《數(shù)據(jù)管理技術(shù)與應(yīng)用》課程是一門涵蓋數(shù)據(jù)庫、大數(shù)據(jù)等多種數(shù)據(jù)管理技術(shù)的課程。它以數(shù)據(jù)管理技術(shù)發(fā)展為脈絡(luò),介紹數(shù)據(jù)管理技術(shù)如何從基于文件系統(tǒng)管理數(shù)據(jù)演變?yōu)榛诖髷?shù)據(jù)管理數(shù)據(jù)。以此為指導(dǎo)思想,所以本課程的實(shí)踐特色十分突出,要求學(xué)生在實(shí)踐活動(dòng)中深刻體會(huì)到各類數(shù)據(jù)管理技術(shù)的優(yōu)劣,理解數(shù)據(jù)管理技術(shù)演化的原生力。
現(xiàn)有相關(guān)課程,如《數(shù)據(jù)庫原理》《大數(shù)據(jù)管理》等課程,其實(shí)踐往往是應(yīng)用系統(tǒng),而非剖析系統(tǒng)[1-3]。以《數(shù)據(jù)庫原理》的實(shí)踐為例,對(duì)于很多院校而言,其實(shí)踐內(nèi)容往往是數(shù)據(jù)庫編程,而這樣的實(shí)踐內(nèi)容更符合《信息系統(tǒng)分析與設(shè)計(jì)》之類課程的內(nèi)容。由于實(shí)踐教學(xué)所采用的內(nèi)容與理論教學(xué)內(nèi)容脫節(jié),導(dǎo)致學(xué)生無法在實(shí)踐中驗(yàn)證和呼應(yīng)理論知識(shí)點(diǎn)。
為什么會(huì)出現(xiàn)上述問題?我們認(rèn)為這是因?yàn)橹T如數(shù)據(jù)管理軟件過于龐大,并不利于學(xué)生剖析和學(xué)習(xí)。例如像SQL Server這樣的商用數(shù)據(jù)庫追求功能完善、用戶接口良好等商業(yè)指標(biāo),其軟件體積龐大、內(nèi)部結(jié)構(gòu)復(fù)雜,并不利于學(xué)生依托其來剖析和驗(yàn)證理論知識(shí)點(diǎn),而且前期龐大的學(xué)習(xí)投入,容易挫敗學(xué)生的學(xué)習(xí)興趣。隨著大數(shù)據(jù)等新型數(shù)據(jù)管理技術(shù)的發(fā)展和普及,各類數(shù)據(jù)管理軟件也越來越多,單純以應(yīng)用軟件為內(nèi)容的實(shí)踐越來越難以滿足教學(xué)需求,有必要對(duì)其進(jìn)行改變[4-6]。
為了緩解上述問題,我們嘗試采用積木式實(shí)踐教學(xué)。所謂積木式實(shí)踐就是像搭積木一樣,來構(gòu)造一個(gè)極其簡單的數(shù)據(jù)庫軟件??梢詫⒁粋€(gè)與數(shù)據(jù)管理相關(guān)的問題進(jìn)行簡化,形成一個(gè)微型數(shù)據(jù)庫的構(gòu)造需求。教師對(duì)其進(jìn)行剖析和分解,將其需求映射為相對(duì)獨(dú)立的多個(gè)模塊。根據(jù)實(shí)踐教學(xué)目的,教師會(huì)提供其中多數(shù)模塊,由學(xué)生單獨(dú)或者協(xié)作來構(gòu)造缺失的模塊,從而完成一個(gè)相對(duì)完整的數(shù)據(jù)管理功能系統(tǒng)。每個(gè)知識(shí)點(diǎn)構(gòu)建一個(gè)教學(xué)案例,基于一個(gè)教學(xué)案例形成若干實(shí)踐科目,在少量前期投入的基礎(chǔ)上,學(xué)生就可以驗(yàn)證對(duì)應(yīng)理論知識(shí)點(diǎn),同時(shí)可以提高學(xué)習(xí)效率,激發(fā)其學(xué)生興趣。
為便于說明,首先給出幾個(gè)定義。
[定義1]實(shí)踐案例:圍繞某個(gè)理論知識(shí)點(diǎn)所開展的實(shí)踐科目,包括教學(xué)實(shí)施計(jì)劃、支撐教學(xué)的軟件實(shí)例以及相關(guān)文檔。
[定義2]軟件實(shí)例:為實(shí)踐科目開展所構(gòu)建的軟件實(shí)例。
[定義3]積木塊:軟件實(shí)例的組成部分,可以是程序代碼,或者數(shù)據(jù)結(jié)構(gòu)定義等。
[定義4]實(shí)踐題目:依托實(shí)踐案例,教師通過從軟件實(shí)例中抽取若干積木塊,并附上相應(yīng)的交互接口手冊、實(shí)踐要求等文檔,形成面向?qū)W生的實(shí)踐題目。
結(jié)合圖1以及上述定義,說明積木式實(shí)踐教學(xué)思想。針對(duì)特定的理論知識(shí)點(diǎn),教師經(jīng)過前期教學(xué)準(zhǔn)備,形成特定的實(shí)踐案例。實(shí)踐案例中包括可以分拆定制的軟件實(shí)例,軟件實(shí)例可以視為有多個(gè)積木塊經(jīng)過組合形成的集合。教師根據(jù)本次實(shí)踐課程的具體情況,從軟件實(shí)例中抽取出少量積木,形成面向?qū)W生的、特定的實(shí)踐題目。學(xué)生的任務(wù)就是填補(bǔ)缺失的積木,以確保軟件實(shí)例的完整性,并驗(yàn)證軟件實(shí)例的正確性。這種類似于填空的實(shí)踐題目,既保證了學(xué)生完成作業(yè)的自由度,也減少了學(xué)生實(shí)踐的前期非必要投入。
圖1 積木式實(shí)踐思想示意
實(shí)踐案例包括:教學(xué)實(shí)施計(jì)劃、支撐教學(xué)的軟件實(shí)例以及相關(guān)文檔。例如理論知識(shí)點(diǎn)是單文件型數(shù)據(jù)庫,為了配合積木式實(shí)施就需要構(gòu)建一個(gè)單文件型數(shù)據(jù)庫系統(tǒng),并按軟件功能模塊的特點(diǎn)將其分拆形成一個(gè)個(gè)可裝卸的積木塊,根據(jù)搭建積木塊的不同形成不同的實(shí)踐題目,并編寫相應(yīng)的教學(xué)實(shí)施計(jì)劃以及學(xué)生用的編程指導(dǎo)書。
一個(gè)理論知識(shí)點(diǎn)可以形成多個(gè)案例,一個(gè)實(shí)踐案例可以形成多個(gè)實(shí)踐題目。教師可以根據(jù)教學(xué)需求,將同一個(gè)理論知識(shí)點(diǎn)映射成不同的實(shí)踐案例,例如在實(shí)現(xiàn)簡單的單表查詢中,教師可以設(shè)定不同的數(shù)據(jù)字典結(jié)構(gòu),從而使得有不同的解決思路,形成不同的實(shí)踐案例?;谝粋€(gè)案例,可以形成多個(gè)實(shí)踐題目。通常,實(shí)踐案例都會(huì)有多個(gè)積木構(gòu)成。教師根據(jù)教學(xué)的需要,讓多位學(xué)生協(xié)作完成多個(gè)積木,也可以讓不同學(xué)生完成不同積木。
積木塊實(shí)踐教學(xué)準(zhǔn)備最大的挑戰(zhàn)是完成軟件實(shí)例的構(gòu)建。主要的困難有兩個(gè)方面。首先是需要構(gòu)建的軟件實(shí)例數(shù)量多。理想情況下,實(shí)踐案例應(yīng)該涵蓋所有關(guān)鍵數(shù)據(jù)管理技術(shù)。但是,就數(shù)據(jù)管理技術(shù)的發(fā)展脈絡(luò)來看,這涉及從最基本的基于文件管理數(shù)據(jù)到復(fù)雜的基于大數(shù)據(jù)管理數(shù)據(jù)這一演變過程中所涉及的諸多關(guān)鍵技術(shù)。其次是構(gòu)建軟件實(shí)例的工作量大。就以數(shù)據(jù)庫管理而言,自身就是一個(gè)十分龐大的軟件系統(tǒng)。要想做大而全的軟件實(shí)例集合無疑是一件十分困難的事情。
結(jié)合教學(xué)課時(shí)以及教學(xué)需求,積木式實(shí)踐教學(xué)案例將針對(duì)少量典型理論知識(shí)點(diǎn)展開。在選擇所需要構(gòu)造積木式實(shí)踐教學(xué)案例,我們遵循以下原則:這些知識(shí)點(diǎn)應(yīng)該反映了數(shù)據(jù)管理技術(shù)發(fā)展的關(guān)鍵節(jié)點(diǎn),或者這些知識(shí)點(diǎn)的實(shí)踐能夠讓學(xué)生更直觀地認(rèn)識(shí)和理解理論知識(shí),同時(shí)也要兼顧到實(shí)踐案例的可擴(kuò)展性,從而支撐多種實(shí)踐題目的開展。通過減少積木式實(shí)踐案例的規(guī)模,使積木式實(shí)踐教學(xué)可行。
為了簡化實(shí)踐案例的構(gòu)建工作,我們盡可能簡化目標(biāo)軟件的設(shè)計(jì)和實(shí)現(xiàn)。課程所使用的軟件并不是為了商用,并不需要穩(wěn)定的功能和優(yōu)越的性能表現(xiàn),它僅僅用于教學(xué)演示或者輔助實(shí)踐使用。從這個(gè)角度考慮,除了需要驗(yàn)證的知識(shí)點(diǎn)外,一切非必要的功能可裁剪則裁剪,使目標(biāo)軟件功能集最小化。同時(shí)在外觀上則采用簡單的控制臺(tái)風(fēng)格,使學(xué)生著重于內(nèi)部邏輯的實(shí)現(xiàn),而非復(fù)雜的軟件表現(xiàn)風(fēng)格等非必要元素。
軟件實(shí)例應(yīng)該盡可能具備可擴(kuò)展特性。我們希望一個(gè)軟件實(shí)例可以支撐多組實(shí)踐題目,使得教師可以立足一個(gè)軟件實(shí)例,針對(duì)不同類型和能力的學(xué)生,定制不同的實(shí)踐題目。更直觀來講,軟件實(shí)例應(yīng)該包括一定數(shù)量的積木塊,這些積木塊具有一定的靈活組合的特性,這樣通過裁剪不同組合的積木塊就可以形成不同實(shí)踐題目。此外,考慮到數(shù)據(jù)管理技術(shù)的延續(xù)性,實(shí)踐案例之間也會(huì)存在一定的承接關(guān)系,例如在構(gòu)建了簡單的單文件數(shù)據(jù)表查詢的基礎(chǔ)上,可以實(shí)施并發(fā)控制的實(shí)踐案例。
實(shí)踐案例建設(shè)是一個(gè)長期的工作。我們正在建立四個(gè)實(shí)踐案例,初步支撐課程的實(shí)踐教學(xué)活動(dòng)。我們也認(rèn)為:實(shí)踐案例構(gòu)建也是學(xué)生實(shí)踐的內(nèi)容之一。當(dāng)上一屆學(xué)生完成了某些實(shí)踐題目以后,教師能夠采集到若干新的積木塊,可以嘗試以此為基礎(chǔ)形成新的實(shí)踐案例,后續(xù)學(xué)生可以進(jìn)一步構(gòu)建和優(yōu)化實(shí)踐案例。通過多屆學(xué)生和教師的努力,可以進(jìn)一步擴(kuò)充和豐富實(shí)踐案例庫的內(nèi)容,從而支撐數(shù)量更多、類型更豐富的實(shí)踐題目。
根據(jù)教學(xué)需求,由教師發(fā)布本次實(shí)踐題目。教師發(fā)布的實(shí)踐題目包括:缺失特定積木的軟件實(shí)例,以及必要的背景資料。背景資料包括對(duì)軟件實(shí)例的描述、模塊接口說明、學(xué)生所需完成的任務(wù)。這樣學(xué)生在接手實(shí)踐題目時(shí)會(huì)明確自己所需要完成的實(shí)踐內(nèi)容。每個(gè)實(shí)踐學(xué)生或者每個(gè)實(shí)踐小組都會(huì)獲得一份實(shí)踐題目,所有實(shí)踐題目可以并不完全相同,這樣更有利于學(xué)生相互交流和促進(jìn)。
為了發(fā)布實(shí)踐題目,教師需要對(duì)軟件實(shí)例進(jìn)行分拆,形成若干積木塊。教師應(yīng)該根據(jù)教學(xué)對(duì)象和教學(xué)階段的特點(diǎn)分解軟件實(shí)例,并進(jìn)一步明確哪些功能模塊由教師編寫,哪些功能模塊由學(xué)生來編寫;明確哪些模塊采用前期完成的模塊,哪些模塊需要在本次實(shí)踐教學(xué)中完成;明確模塊完成的參與學(xué)生的規(guī)模,每個(gè)學(xué)生的角色和作用。在軟件實(shí)例中有針對(duì)性地抽取出若干積木塊,形成不同類型的實(shí)踐題目。
教師所發(fā)布的實(shí)踐題目可繁可簡。假設(shè)某個(gè)軟件實(shí)例存在n個(gè)積木塊,那么教師可以任意抽走一個(gè)積木塊,從而形成n個(gè)實(shí)踐題目。這是最基本的一種形成實(shí)踐題目的方法。教師也可以根據(jù)每個(gè)積木塊的特點(diǎn)以及實(shí)踐背景特點(diǎn),抽取少量積木塊形成新的實(shí)踐題目。當(dāng)然,也可以鼓勵(lì)多名學(xué)生共同協(xié)作完成一個(gè)新的軟件實(shí)例,促成新的實(shí)踐案例。這更有利于學(xué)生從整體上了解和掌握相關(guān)知識(shí)點(diǎn)。
為幫助學(xué)生完成實(shí)踐題目,教師有必要引導(dǎo)學(xué)生了解軟件實(shí)例以及必要的交互接口。由于學(xué)生的實(shí)踐工作是依托軟件實(shí)例,學(xué)生有必要明確自己所完成的實(shí)踐內(nèi)容在整個(gè)軟件實(shí)例中的地位和作用,以幫助其完成實(shí)踐內(nèi)容。此外,由于學(xué)生所需要完成的積木塊可能需要軟件實(shí)例的底層支撐,或者需要給軟件實(shí)例提供向上支撐,這就需要學(xué)生明確積木塊所有對(duì)外服務(wù)接口。為了減少學(xué)生實(shí)踐的前期投入,這些內(nèi)容需要教師有意識(shí)地引導(dǎo),以加快學(xué)生實(shí)踐進(jìn)度,盡快將主要精力聚集于所要完成的積木塊。
教師需要盡快幫助學(xué)生完成編程環(huán)境的部署。一個(gè)缺失積木塊的軟件實(shí)例,可以以軟件工程的形式提供給學(xué)生,但是其中部分源碼存在缺失,需要學(xué)生完成缺失源碼的補(bǔ)全。目前,我們采用C語言的形式來開發(fā)軟件實(shí)例,也要求學(xué)生用C語言來填補(bǔ)缺失代碼。為了避免學(xué)生修改工程其它內(nèi)容導(dǎo)致編譯失敗,我們采用靜態(tài)鏈接庫或者動(dòng)態(tài)鏈接庫的形式,盡可能將軟件實(shí)例的其它代碼封裝起來,避免學(xué)生誤修改或者誤刪除。
一般而言,由于實(shí)踐學(xué)時(shí)的限制,每個(gè)學(xué)生只完成少量、部分的編程工作。在具體實(shí)踐中,我們有意識(shí)地控制缺失積木塊的規(guī)模,盡可能將學(xué)生的工作量限制在100行代碼每學(xué)時(shí)左右,或者同等工作量,以確保在規(guī)定時(shí)間內(nèi)可完成。當(dāng)然,我們也給出了開放性實(shí)踐題目,鼓勵(lì)學(xué)生完成更多的積木塊建設(shè),也確保學(xué)有余力的學(xué)生可以進(jìn)行更多有益的探索和嘗試。
學(xué)生在完成積木塊構(gòu)建后,可以依托軟件實(shí)例驗(yàn)證其正確性。從本質(zhì)上講,學(xué)生所補(bǔ)充的積木塊是軟件實(shí)例缺失的模塊或者數(shù)據(jù)結(jié)構(gòu),只有填補(bǔ)了這些內(nèi)容,軟件實(shí)例才能恢復(fù)工作。通過觀察軟件實(shí)例的運(yùn)行結(jié)果可以驗(yàn)證學(xué)生所填補(bǔ)內(nèi)容的正確性以及軟件實(shí)例的完整性。這種正確性和完整性驗(yàn)證是對(duì)學(xué)生實(shí)踐最基本的考核要求。
在完成實(shí)踐題目正確性和完整性驗(yàn)證后,學(xué)生可以通過小組分析和討論,來進(jìn)一步獲取知識(shí)。例如在為什么會(huì)出現(xiàn)數(shù)據(jù)庫這個(gè)主題上,教材通常只會(huì)介紹基于文件系統(tǒng)的數(shù)據(jù)管理系統(tǒng),會(huì)存在一些問題,比如說在阿波羅登月計(jì)劃零件管理系統(tǒng)中有60%數(shù)據(jù)是冗余數(shù)據(jù),數(shù)據(jù)的不一致性問題也會(huì)困擾數(shù)據(jù)使用者。在具體實(shí)踐活動(dòng)中,學(xué)生會(huì)更為深刻地體會(huì)到為什么會(huì)出現(xiàn)這些問題,也就更為深刻地理解數(shù)據(jù)庫軟件出現(xiàn)的必要性和時(shí)代需求。
我們鼓勵(lì)學(xué)生在討論的基礎(chǔ)上進(jìn)行新的嘗試。例如在單文件數(shù)據(jù)庫查詢實(shí)踐中,學(xué)生會(huì)發(fā)現(xiàn)單文件數(shù)據(jù)庫的備份和轉(zhuǎn)移十分方便,但是由于多表數(shù)據(jù)集中存放于一個(gè)文件,導(dǎo)致數(shù)據(jù)查找和存儲(chǔ)的不便。我們會(huì)引導(dǎo)學(xué)生去解決數(shù)據(jù)過多導(dǎo)致數(shù)據(jù)搬移的問題,也會(huì)引導(dǎo)學(xué)生去嘗試多文件數(shù)據(jù)庫的創(chuàng)建。使學(xué)生能夠更為深入地了解底層數(shù)據(jù)管理的細(xì)節(jié)。
我們以最為基本的單表查詢?yōu)閷?shí)例說明如何開展積木式實(shí)踐教學(xué)。單表查詢的目的是在單文件中存放單個(gè)表,目錄下存放了多個(gè)文件對(duì)應(yīng)多個(gè)表,要求學(xué)生通過查詢數(shù)據(jù)字典獲知某個(gè)表的存儲(chǔ)位置,并查詢該表中的所有內(nèi)容。為了盡可能簡化,我們采用了控制臺(tái)的人機(jī)風(fēng)格,查詢命令也僅僅支持“select * from 表名”。軟件實(shí)例運(yùn)行時(shí)會(huì)接收用戶輸入的SQL命令,在判斷命令合法性后,從數(shù)據(jù)字典查詢對(duì)應(yīng)表的存儲(chǔ)信息和結(jié)構(gòu)信息,并進(jìn)一步查詢表內(nèi)數(shù)據(jù)。
我們將該軟件實(shí)例劃分了多個(gè)積木塊。這些積木塊包括:數(shù)據(jù)字典結(jié)構(gòu)定義、數(shù)據(jù)表結(jié)構(gòu)定義、用戶命令解析、數(shù)據(jù)字典查詢和數(shù)據(jù)查詢。這里面數(shù)據(jù)字典結(jié)構(gòu)定義和數(shù)據(jù)表結(jié)構(gòu)定義兩個(gè)積木塊只是定義,不涉及編程。在初始情況下,教師可以給出某種定義,供學(xué)生參考和修改。學(xué)生可以進(jìn)一步依據(jù)結(jié)構(gòu)定義,開展用戶命令解析、數(shù)據(jù)字典查詢和數(shù)據(jù)查詢這些積木塊的構(gòu)建。
為進(jìn)一步說明,給出數(shù)據(jù)字典查詢積木塊填補(bǔ)的示例。圖2就是教師給出的一種數(shù)據(jù)字典結(jié)構(gòu)。針對(duì)這種數(shù)據(jù)字典結(jié)構(gòu),學(xué)生需要完成以下工作:①核對(duì)數(shù)據(jù)字典標(biāo)識(shí)符,以確保當(dāng)前數(shù)據(jù)字典的合法性;②根據(jù)用戶命令解析所返回的表名,查詢目的表是否存在;③查詢目的表的信息描述內(nèi)容,作為輸出提交給下一個(gè)積木塊。這樣的工作量對(duì)于一個(gè)本科學(xué)生而言適中,是能夠在較短的實(shí)踐學(xué)時(shí)內(nèi)完成。
圖2 數(shù)據(jù)字典結(jié)構(gòu)示意
學(xué)生通過上述實(shí)踐案例可以獲得許多有益的知識(shí)。首先,學(xué)生對(duì)于數(shù)據(jù)字典有了更為直觀的認(rèn)識(shí)。在傳統(tǒng)教育中,往往只會(huì)提及數(shù)據(jù)字典用于存放數(shù)據(jù)庫管理系統(tǒng)的內(nèi)部數(shù)據(jù),但究竟是什么樣,學(xué)生很難有直觀的認(rèn)識(shí)。然而,當(dāng)學(xué)生真正去剖析以后就會(huì)真正認(rèn)識(shí)數(shù)據(jù)字典。其次,學(xué)生會(huì)認(rèn)識(shí)到數(shù)據(jù)字典的重要性。當(dāng)離開了數(shù)據(jù)字典,那么所有被管理的數(shù)據(jù)都會(huì)無法被解析和理解。經(jīng)過這樣的實(shí)踐教學(xué)以后,學(xué)生對(duì)于數(shù)據(jù)字典將不再陌生。
依托這個(gè)實(shí)踐實(shí)例,還可以開展更多擴(kuò)展性實(shí)踐題目。例如可以進(jìn)一步開展SQL命令解析,增加對(duì)列名、視圖的解析,增加對(duì)條件查詢的理解等;也可以讓學(xué)生重新定義數(shù)據(jù)字典和數(shù)據(jù)表的結(jié)構(gòu),并據(jù)此重新設(shè)計(jì)相應(yīng)接口的實(shí)現(xiàn),進(jìn)一步對(duì)比不同結(jié)構(gòu)的優(yōu)劣;也可以進(jìn)一步讓學(xué)生開展單文件多表的查詢,對(duì)比不同存儲(chǔ)方式的優(yōu)劣。此外,依托實(shí)踐實(shí)例,還可以支持后續(xù)基于事務(wù)并發(fā)控制、數(shù)據(jù)恢復(fù)等科目的實(shí)踐。
本文針對(duì)《數(shù)據(jù)管理技術(shù)與應(yīng)用》課程實(shí)踐內(nèi)容難以匹配理論知識(shí)的問題,剖析造成這種問題的原因,提出積木式實(shí)踐教學(xué)方法。積木式實(shí)踐教學(xué)方法使學(xué)生能夠在較小的前置基礎(chǔ)上,以填空式的方法完成實(shí)踐題目,從而完成對(duì)理論知識(shí)驗(yàn)證,使實(shí)踐操作能夠與理論教學(xué)緊密結(jié)合起來。