周洪偉,原錦輝,胡浩,柯志鵬,張玉臣
(信息工程大學,河南 鄭州)
《數據管理技術與應用》課程是一門涵蓋數據庫、大數據等多種數據管理技術的課程。它以數據管理技術發展為脈絡,介紹數據管理技術如何從基于文件系統管理數據演變為基于大數據管理數據。以此為指導思想,所以本課程的實踐特色十分突出,要求學生在實踐活動中深刻體會到各類數據管理技術的優劣,理解數據管理技術演化的原生力。
現有相關課程,如《數據庫原理》《大數據管理》等課程,其實踐往往是應用系統,而非剖析系統[1-3]。以《數據庫原理》的實踐為例,對于很多院校而言,其實踐內容往往是數據庫編程,而這樣的實踐內容更符合《信息系統分析與設計》之類課程的內容。由于實踐教學所采用的內容與理論教學內容脫節,導致學生無法在實踐中驗證和呼應理論知識點。
為什么會出現上述問題?我們認為這是因為諸如數據管理軟件過于龐大,并不利于學生剖析和學習。例如像SQL Server這樣的商用數據庫追求功能完善、用戶接口良好等商業指標,其軟件體積龐大、內部結構復雜,并不利于學生依托其來剖析和驗證理論知識點,而且前期龐大的學習投入,容易挫敗學生的學習興趣。隨著大數據等新型數據管理技術的發展和普及,各類數據管理軟件也越來越多,單純以應用軟件為內容的實踐越來越難以滿足教學需求,有必要對其進行改變[4-6]。
為了緩解上述問題,我們嘗試采用積木式實踐教學。所謂積木式實踐就是像搭積木一樣,來構造一個極其簡單的數據庫軟件。可以將一個與數據管理相關的問題進行簡化,形成一個微型數據庫的構造需求。教師對其進行剖析和分解,將其需求映射為相對獨立的多個模塊。根據實踐教學目的,教師會提供其中多數模塊,由學生單獨或者協作來構造缺失的模塊,從而完成一個相對完整的數據管理功能系統。每個知識點構建一個教學案例,基于一個教學案例形成若干實踐科目,在少量前期投入的基礎上,學生就可以驗證對應理論知識點,同時可以提高學習效率,激發其學生興趣。
為便于說明,首先給出幾個定義。
[定義1]實踐案例:圍繞某個理論知識點所開展的實踐科目,包括教學實施計劃、支撐教學的軟件實例以及相關文檔。
[定義2]軟件實例:為實踐科目開展所構建的軟件實例。
[定義3]積木塊:軟件實例的組成部分,可以是程序代碼,或者數據結構定義等。
[定義4]實踐題目:依托實踐案例,教師通過從軟件實例中抽取若干積木塊,并附上相應的交互接口手冊、實踐要求等文檔,形成面向學生的實踐題目。
結合圖1以及上述定義,說明積木式實踐教學思想。針對特定的理論知識點,教師經過前期教學準備,形成特定的實踐案例。實踐案例中包括可以分拆定制的軟件實例,軟件實例可以視為有多個積木塊經過組合形成的集合。教師根據本次實踐課程的具體情況,從軟件實例中抽取出少量積木,形成面向學生的、特定的實踐題目。學生的任務就是填補缺失的積木,以確保軟件實例的完整性,并驗證軟件實例的正確性。這種類似于填空的實踐題目,既保證了學生完成作業的自由度,也減少了學生實踐的前期非必要投入。

圖1 積木式實踐思想示意
實踐案例包括:教學實施計劃、支撐教學的軟件實例以及相關文檔。例如理論知識點是單文件型數據庫,為了配合積木式實施就需要構建一個單文件型數據庫系統,并按軟件功能模塊的特點將其分拆形成一個個可裝卸的積木塊,根據搭建積木塊的不同形成不同的實踐題目,并編寫相應的教學實施計劃以及學生用的編程指導書。
一個理論知識點可以形成多個案例,一個實踐案例可以形成多個實踐題目。教師可以根據教學需求,將同一個理論知識點映射成不同的實踐案例,例如在實現簡單的單表查詢中,教師可以設定不同的數據字典結構,從而使得有不同的解決思路,形成不同的實踐案例。基于一個案例,可以形成多個實踐題目。通常,實踐案例都會有多個積木構成。教師根據教學的需要,讓多位學生協作完成多個積木,也可以讓不同學生完成不同積木。
積木塊實踐教學準備最大的挑戰是完成軟件實例的構建。主要的困難有兩個方面。首先是需要構建的軟件實例數量多。理想情況下,實踐案例應該涵蓋所有關鍵數據管理技術。但是,就數據管理技術的發展脈絡來看,這涉及從最基本的基于文件管理數據到復雜的基于大數據管理數據這一演變過程中所涉及的諸多關鍵技術。其次是構建軟件實例的工作量大。就以數據庫管理而言,自身就是一個十分龐大的軟件系統。要想做大而全的軟件實例集合無疑是一件十分困難的事情。
結合教學課時以及教學需求,積木式實踐教學案例將針對少量典型理論知識點展開。在選擇所需要構造積木式實踐教學案例,我們遵循以下原則:這些知識點應該反映了數據管理技術發展的關鍵節點,或者這些知識點的實踐能夠讓學生更直觀地認識和理解理論知識,同時也要兼顧到實踐案例的可擴展性,從而支撐多種實踐題目的開展。通過減少積木式實踐案例的規模,使積木式實踐教學可行。
為了簡化實踐案例的構建工作,我們盡可能簡化目標軟件的設計和實現。課程所使用的軟件并不是為了商用,并不需要穩定的功能和優越的性能表現,它僅僅用于教學演示或者輔助實踐使用。從這個角度考慮,除了需要驗證的知識點外,一切非必要的功能可裁剪則裁剪,使目標軟件功能集最小化。同時在外觀上則采用簡單的控制臺風格,使學生著重于內部邏輯的實現,而非復雜的軟件表現風格等非必要元素。
軟件實例應該盡可能具備可擴展特性。我們希望一個軟件實例可以支撐多組實踐題目,使得教師可以立足一個軟件實例,針對不同類型和能力的學生,定制不同的實踐題目。更直觀來講,軟件實例應該包括一定數量的積木塊,這些積木塊具有一定的靈活組合的特性,這樣通過裁剪不同組合的積木塊就可以形成不同實踐題目。此外,考慮到數據管理技術的延續性,實踐案例之間也會存在一定的承接關系,例如在構建了簡單的單文件數據表查詢的基礎上,可以實施并發控制的實踐案例。
實踐案例建設是一個長期的工作。我們正在建立四個實踐案例,初步支撐課程的實踐教學活動。我們也認為:實踐案例構建也是學生實踐的內容之一。當上一屆學生完成了某些實踐題目以后,教師能夠采集到若干新的積木塊,可以嘗試以此為基礎形成新的實踐案例,后續學生可以進一步構建和優化實踐案例。通過多屆學生和教師的努力,可以進一步擴充和豐富實踐案例庫的內容,從而支撐數量更多、類型更豐富的實踐題目。
根據教學需求,由教師發布本次實踐題目。教師發布的實踐題目包括:缺失特定積木的軟件實例,以及必要的背景資料。背景資料包括對軟件實例的描述、模塊接口說明、學生所需完成的任務。這樣學生在接手實踐題目時會明確自己所需要完成的實踐內容。每個實踐學生或者每個實踐小組都會獲得一份實踐題目,所有實踐題目可以并不完全相同,這樣更有利于學生相互交流和促進。
為了發布實踐題目,教師需要對軟件實例進行分拆,形成若干積木塊。教師應該根據教學對象和教學階段的特點分解軟件實例,并進一步明確哪些功能模塊由教師編寫,哪些功能模塊由學生來編寫;明確哪些模塊采用前期完成的模塊,哪些模塊需要在本次實踐教學中完成;明確模塊完成的參與學生的規模,每個學生的角色和作用。在軟件實例中有針對性地抽取出若干積木塊,形成不同類型的實踐題目。
教師所發布的實踐題目可繁可簡。假設某個軟件實例存在n個積木塊,那么教師可以任意抽走一個積木塊,從而形成n個實踐題目。這是最基本的一種形成實踐題目的方法。教師也可以根據每個積木塊的特點以及實踐背景特點,抽取少量積木塊形成新的實踐題目。當然,也可以鼓勵多名學生共同協作完成一個新的軟件實例,促成新的實踐案例。這更有利于學生從整體上了解和掌握相關知識點。
為幫助學生完成實踐題目,教師有必要引導學生了解軟件實例以及必要的交互接口。由于學生的實踐工作是依托軟件實例,學生有必要明確自己所完成的實踐內容在整個軟件實例中的地位和作用,以幫助其完成實踐內容。此外,由于學生所需要完成的積木塊可能需要軟件實例的底層支撐,或者需要給軟件實例提供向上支撐,這就需要學生明確積木塊所有對外服務接口。為了減少學生實踐的前期投入,這些內容需要教師有意識地引導,以加快學生實踐進度,盡快將主要精力聚集于所要完成的積木塊。
教師需要盡快幫助學生完成編程環境的部署。一個缺失積木塊的軟件實例,可以以軟件工程的形式提供給學生,但是其中部分源碼存在缺失,需要學生完成缺失源碼的補全。目前,我們采用C語言的形式來開發軟件實例,也要求學生用C語言來填補缺失代碼。為了避免學生修改工程其它內容導致編譯失敗,我們采用靜態鏈接庫或者動態鏈接庫的形式,盡可能將軟件實例的其它代碼封裝起來,避免學生誤修改或者誤刪除。
一般而言,由于實踐學時的限制,每個學生只完成少量、部分的編程工作。在具體實踐中,我們有意識地控制缺失積木塊的規模,盡可能將學生的工作量限制在100行代碼每學時左右,或者同等工作量,以確保在規定時間內可完成。當然,我們也給出了開放性實踐題目,鼓勵學生完成更多的積木塊建設,也確保學有余力的學生可以進行更多有益的探索和嘗試。
學生在完成積木塊構建后,可以依托軟件實例驗證其正確性。從本質上講,學生所補充的積木塊是軟件實例缺失的模塊或者數據結構,只有填補了這些內容,軟件實例才能恢復工作。通過觀察軟件實例的運行結果可以驗證學生所填補內容的正確性以及軟件實例的完整性。這種正確性和完整性驗證是對學生實踐最基本的考核要求。
在完成實踐題目正確性和完整性驗證后,學生可以通過小組分析和討論,來進一步獲取知識。例如在為什么會出現數據庫這個主題上,教材通常只會介紹基于文件系統的數據管理系統,會存在一些問題,比如說在阿波羅登月計劃零件管理系統中有60%數據是冗余數據,數據的不一致性問題也會困擾數據使用者。在具體實踐活動中,學生會更為深刻地體會到為什么會出現這些問題,也就更為深刻地理解數據庫軟件出現的必要性和時代需求。
我們鼓勵學生在討論的基礎上進行新的嘗試。例如在單文件數據庫查詢實踐中,學生會發現單文件數據庫的備份和轉移十分方便,但是由于多表數據集中存放于一個文件,導致數據查找和存儲的不便。我們會引導學生去解決數據過多導致數據搬移的問題,也會引導學生去嘗試多文件數據庫的創建。使學生能夠更為深入地了解底層數據管理的細節。
我們以最為基本的單表查詢為實例說明如何開展積木式實踐教學。單表查詢的目的是在單文件中存放單個表,目錄下存放了多個文件對應多個表,要求學生通過查詢數據字典獲知某個表的存儲位置,并查詢該表中的所有內容。為了盡可能簡化,我們采用了控制臺的人機風格,查詢命令也僅僅支持“select * from 表名”。軟件實例運行時會接收用戶輸入的SQL命令,在判斷命令合法性后,從數據字典查詢對應表的存儲信息和結構信息,并進一步查詢表內數據。
我們將該軟件實例劃分了多個積木塊。這些積木塊包括:數據字典結構定義、數據表結構定義、用戶命令解析、數據字典查詢和數據查詢。這里面數據字典結構定義和數據表結構定義兩個積木塊只是定義,不涉及編程。在初始情況下,教師可以給出某種定義,供學生參考和修改。學生可以進一步依據結構定義,開展用戶命令解析、數據字典查詢和數據查詢這些積木塊的構建。
為進一步說明,給出數據字典查詢積木塊填補的示例。圖2就是教師給出的一種數據字典結構。針對這種數據字典結構,學生需要完成以下工作:①核對數據字典標識符,以確保當前數據字典的合法性;②根據用戶命令解析所返回的表名,查詢目的表是否存在;③查詢目的表的信息描述內容,作為輸出提交給下一個積木塊。這樣的工作量對于一個本科學生而言適中,是能夠在較短的實踐學時內完成。

圖2 數據字典結構示意
學生通過上述實踐案例可以獲得許多有益的知識。首先,學生對于數據字典有了更為直觀的認識。在傳統教育中,往往只會提及數據字典用于存放數據庫管理系統的內部數據,但究竟是什么樣,學生很難有直觀的認識。然而,當學生真正去剖析以后就會真正認識數據字典。其次,學生會認識到數據字典的重要性。當離開了數據字典,那么所有被管理的數據都會無法被解析和理解。經過這樣的實踐教學以后,學生對于數據字典將不再陌生。
依托這個實踐實例,還可以開展更多擴展性實踐題目。例如可以進一步開展SQL命令解析,增加對列名、視圖的解析,增加對條件查詢的理解等;也可以讓學生重新定義數據字典和數據表的結構,并據此重新設計相應接口的實現,進一步對比不同結構的優劣;也可以進一步讓學生開展單文件多表的查詢,對比不同存儲方式的優劣。此外,依托實踐實例,還可以支持后續基于事務并發控制、數據恢復等科目的實踐。
本文針對《數據管理技術與應用》課程實踐內容難以匹配理論知識的問題,剖析造成這種問題的原因,提出積木式實踐教學方法。積木式實踐教學方法使學生能夠在較小的前置基礎上,以填空式的方法完成實踐題目,從而完成對理論知識驗證,使實踐操作能夠與理論教學緊密結合起來。