劉 斌,彭煜瑋,余 琍,彭智勇
(武漢大學計算機學院,湖北武漢 430072)
數據庫原理是計算機專業的一門核心課程,數據庫技術的快速發展,給該課程教學帶來了許多新挑戰[1]。例如,隨著移動互聯網的飛速發展,人們可以使用手機等移動設備快速完成各種交易,與之對應數據庫中的各種記錄規模都在百萬級以上。而且,近幾年來企業對數據的安全越來越重視,國產數據庫替代國外數據庫成為一個很重要的趨勢[2]。數據庫課程的教學與實踐需要適應這些新需求:首先,數據庫的實踐環境要過渡到使用國產數據庫;其次,由于用戶數據庫中包含大量記錄,因此實踐環境需要模擬這種場景,才能使學生更深入地理解數據庫功能以及各種參數配置,使數據庫應用程序的性能滿足用戶需求[3];最后,國產數據庫研發需要大量專業人員,需要培養掌握數據庫內核技術的高端人才[4]。近年來,武漢大學數據庫課程組在教學與實踐中作出與之相適應的改革,通過加深和拓寬原理性知識傳授,設計多層次的數據庫系統實踐方案,培養了一批適應數據庫產業發展的合格人才。
融合式教學,是指將數據庫原理與數據庫系統功能進行關聯[5]。數據庫原理重點介紹關系數據庫相關知識,比較抽象。數據庫軟件給用戶呈現的是各種豐富的功能,每一個功能背后都隱藏著數據庫原理的核心知識,將兩者在課堂教學中進行有機關聯可以幫助學生更好地掌握相應的原理知識,使基礎理論學習不空洞,實踐環節有準備。
在數據庫原理知識點與課程實踐采用的國產數據庫管理系統功能之間建立3 種關聯:直接關聯、內涵關聯以及補充關聯。
(1)直接關聯。數據庫課本內容在數據庫管理系統(Database Management System,DBMS)中的直接體現,兩者之間是一一對應關系[6]。比如結構化查詢語言(Structured Query Language,SQL)的增刪改查功能,課本中SQL 語法規則使用的是標準的SQL,商用的DBMS 都支持兼容。課堂中講授SQL 語句時,學生可以直接在DBMS 中練習使用,這些知識點可以很平滑地進行過渡。
(2)內涵關聯。分析課本知識點與DBMS 功能之間本質上的聯系,以及DBMS 為什么要這樣設置功能,設置的目的是什么。比如數據庫原理中的事務內容,事務是數據庫原理的重要組成部分,課堂首先講授其具備的ACID 4個特性,其次講授事務的并發執行會帶來的3 種不一致性與解決不一致性的方法、事務的串行執行以及兩端鎖協議,最后講授事務的顯式定義begin transaction 語句、事務提交commit 語句以及回滾rollback 語句。這部分內容非常多,也比較難。
DBMS 功能體現在兩個方面:一是提供事務的顯式定義begin transaction 語句、事務提交commit 語句以及事務回滾rollback 語句,但是最重要的鎖對用戶是透明的;二是提供事務隔離級別的定義功能,對應語句為set transaction isolation level,并定義了4個隔離級別。數據庫原理中講授了不同的鎖協議,每一種鎖協議對應事務之間不同的隔離程度,從而清楚地闡述隔離級別和鎖之間的內在關聯。
在講述這部分內容時有一個難點:DBMS 為什么把隔離級別功能留給用戶?這樣做的原因是:用戶從實際需要出發,定義事務需要的最低隔離級別,以最大限度地提高DBMS 的事務吞吐能力。例如,對于一個應用系統來講,T1、T2 兩個事務可能理論上存在同時修改同一個數據的情況,因此需要高級別的隔離程度,如read repeatable。但是真實應用中可能T1、T2 按順序執行,根本不可能并發執行,所以可以把這兩個事務并發執行的隔離級別設置成read committed,從而最大限度地提高事務并發執行程度。經過以上分析,即能把原理、功能以及目的之間的關系講解清楚。
(3)補充關聯。主要是針對數據庫課本中相對比較宏觀、不夠具體以及DBMS 功能相對復雜的一些內容[7],可以利用DBMS 的功能細化知識點,使其更加豐富、具體。例如數據庫的物理設計,通常課本都是簡單幾行,但是DBMS有好幾個對應的功能點,比如表空間、塊使用百分比(PCTUSED)等。表空間是一個很抽象的概念,不好理解。數據庫中的數據最終都存儲在文件中,用戶可以設置多個文件。為了管理方便,建立了表空間的概念,多個邏輯上有關聯的文件可以劃分到一個表空間中,所以一個表空間包含多個數據文件,一個數據文件只能屬于一個表空間。經過以上分析,再進一步介紹表空間各種參數設置以及相應含義。最后可以結合數據訪問的速度要求,將數據存儲在固態硬盤、機械硬盤中。通過逐步深入,講解物理設計中數據的存儲位置、大小、磁盤性能等相關內容,使物理設計更加具體。
武漢大學計算機學院共有計算機科學與技術、軟件工程、人工智能3 個專業。本科班分為計算機科學與技術班、計算機科學與技術卓工班、軟件工程班、軟件工程卓工班、弘毅班。針對不同班級,在課堂講授時有針對性地選擇難度不同的案例。
在計算機科學與技術班和計算機科學與技術卓工班的ER 圖授課中,經典的案例就是大學數據庫,包含學生、課程、教師實體,存在選課、授課聯系。該案例對學生來說比較易懂,但是也存在明顯缺點,就是太簡單。為此,根據武漢大學校運會有學生、教師共同參加的特點,選擇了大學運動會案例。案例的ER 圖如圖1 所示,組別的含義是學生參加學生組項目,教師參加青年組、中年組項目,轉換成關系模型后,數據模式包含了10 個關系,有一定的復雜程度,圖1中省去了部分屬性。

Fig.1 ER diagram of university sports meeting圖1 大學運動會ER圖
表1 展示了ER 圖知識點和運動會ER 圖之間的對應關系。通過該案例向學生形象說明了“兩個實體之間可以參與多種聯系”這個比較難理解的知識點。

Table 1 ER knowledge points and corresponding examples表1 ER圖知識點以及對應實例
因為該案例貼近學生生活,經過分析研討,90%的學生都可以順利地畫出ER 圖,并且可以得到正確的關系模型。在此基礎上進一步聯系實際,向學生指出:參與關系Attend(WNO,PrjNO,Group,Seq)對應比賽用的秩序冊,此時,不少學生才恍然大悟,明白了數據庫中的表、關系等在實際中的具體對應內容,切實體會到了課程理論知識的現實意義。
軟件工程專業學生在軟件開發能力上比其他專業的學生更強,因此課程教學對該專業學生的要求也更高。在軟件工程專業的數據庫課程教學中,除基本的數據庫增刪改查功能外,重點針對觸發器和存儲過程開展教學。最后結合高級程序設計語言,讓學生能夠實現批插入的功能。
軟件工程卓工班則結合事務和觸發器,讓學生掌握事務的不同隔離級別、事務執行過程中觸發器的作用以及破壞觸發器的約束條件導致的事務回滾等問題。
總之,數據庫系統課程教學針對不同專業特點,要求學生對國產DBMS 某一個方面的功能有深入了解,學習并掌握該功能更深更難的應用,達到深入用好國產數據庫軟件的目的,培養學生的鉆研精神以及自主學習能力[8]。
SQL 語言是數據庫原理中一個重要的教學內容,也是學生感到比較困難的一個章節。學好SQL 語言是用好數據庫的基本要求,如果將來從事數據庫相關領域的工作,對SQL 編程也有較高要求。現在的畢業招聘考試一般都會涉及到SQL 語句編程,題目相對復雜,SQL 語句復雜意味著業務邏輯復雜,從業務邏輯到SQL 腳本是一個轉換過程。學生學會復雜的SQL 編程意味著其具備較強的轉換能力。轉換能力培養不是一蹴而就的,需要反復地訓練、體會,這就需要在課堂教學環節中進行訓練和一定的課后練習。
“學生選課數據庫”案例相對來說比較簡單,因此也很難提出比較復雜的問題。由于課堂時間有限,在有限的時間內介紹一個復雜且學生不熟悉的業務背景,要求學生理解需求并進行SQL 編程訓練,效果不一定很好。因此,需要從其他途徑挖掘合適的案例,改造成適合于課堂教學的形式[9]。
QQ 是學生們經常使用的社交工具,里面許多功能都可以作為課程案例,可以引導學生思考這些功能用SQL 語句怎么實現。比如QQ 的好友推薦功能,你和誰有幾個共同好友,但你們還不是好友。給出這樣的查詢:列出有4個共同好友但自身不是好友的用戶對,每個用戶對只出現一次。QQ 的好友信息可以用用戶表User 和好友表Friend表示,其中uid1 和uid2 都是外鍵,參照User 表中的uid 取值:User(uid,Name);Friend(uid1,uid2)。
雖然表結構比較簡單,問題也看似簡單,但是答案還是稍顯復雜。SQL 語句如下:

其他課程中也可以發現許多例子。針對人工智能專業學生的特點,選用關系存儲稀疏矩陣的案例。對于兩個不同矩陣matrix1(row,col,val)和matrix2(row,col,val),要求采用SQL 語句實現兩個稀疏矩陣的相乘,對應的SQL 語句如下:

該案例包含SELECT 語句的6 個子句,通過該SQL 語句,可以完整地說明6個子句的先后執行順序。
數據庫課程組經常展開教學研討,每位老師根據自己課程內容交流學生感興趣的問題。針對這些問題,各自提出合適的案例,然后將所有案例進行概括、整理,形成更多可用于教學的案例。
數據庫課程實踐是數據庫教學的一個重要環節[9]。在實踐環節,首先要和其他課程做好相互銜接。比如在面向對象的程序設計語言課程中,老師很有可能布置利用JDBC 編寫Java 程序訪問數據庫的任務,因此在數據庫實踐中刪除這部分內容。在數據庫實踐環節主要側重于以下幾方面內容:
(1)國產數據庫部署。在數據庫選型上,講授幾種開源國產數據庫,例如PolarDB、OpenGauss、Oceanbase 等,提前讓學生選擇。這樣做的原因是國產數據庫適配的操作系統不是Windows,需要學生花時間學習與操作系統安裝相關的基礎知識。
(2)與國產數據庫廠商加強聯系,邀請工程師進課堂。在授課環節,邀請華為數據庫團隊的專家走進課堂,講授高斯數據庫的功能與特色,對國產數據庫起到了很好的宣傳推廣作用,避免了數據庫實踐環境言必稱MySQL 的局面。
(3)針對性地制定實踐內容。在軟件工程卓工班,側重于SQL 語句編程、觸發器以及事務實踐內容。在事務實踐中,提供腳本模擬兩個事務交叉執行,在不同的隔離級別下觀察事務執行結果,再反推在此情況下數據庫加鎖和釋放鎖的過程,從而讓學生更好地掌握各種封鎖協議。對于能力突出的學生,鼓勵其編寫模擬程序,一次性向數據庫中插入百萬條記錄,體會索引在連接查詢中的作用。最后使用SSD 和機械硬盤存儲數據,讓學生觀察對于同一個SQL 查詢語句,磁盤性能對查詢性能的影響。
(4)針對弘毅班的學生,開展迷你數據庫(miniDB)研制的課程實踐。弘毅班是教育部“基礎學科拔尖人才試驗計劃”在武漢大學的具體實施,培養有志于國產數據庫研究與開發的專業人才。弘毅班的課堂教學內容與其他班級不一樣,增加了數據庫系統實現部分的講解,并且第二學期有專門的數據庫系統實踐課程。在實踐中,每個小組5 名學生,分別負責存儲、編譯、執行、索引和事務。任務基本完成情況如表2,結果表明開發一個演示版的數據庫是可行的,相信經過一兩年完善,每一個小組均能完成該任務。

Table 2 Analysis and strategy of the results of database system development practice表2 數據庫系統開發實踐完成結果分析與對策
思政教學,落實在大處,即引導學生增強愛國主義觀點[10]。而從小處看,則是要培養學生做一個健康、熱愛生活的人。在數據庫教學、實踐以及考試環節中,有針對性地、恰到好處地引入思政元素[11]。
例如在數據庫引言教學中,加入國產數據庫近年來的發展歷史以及在各個行業的顯著應用。在課堂重點分析天貓雙十一每秒支持58.3 萬筆交易背后的技術,以及對生活帶來的各種影響,讓學生明白國產數據庫不僅可實現國外先進數據庫的功能,甚至可以做得更好;同時介紹陽振坤老師用10 年時間搭建Oceanbase 數據庫的故事,激勵年輕有為的大學生們投身到國產數據庫研發中。
數據庫主要用于管理數據,在考試環節把國家發生的大事,同時也是學生感興趣的話題用數據庫形式表現出來。比如前幾年我國海軍的萬噸驅逐艦服役,在學生們中反響巨大。構建軍艦、級別、演習、士兵之間的ER 圖作為考題,考試結束時,學生們紛紛和老師討論該題目有哪些地方可以改進。對該題的得分進行統計,90%以上的學生均能拿到滿分。另外,將核酸檢測場景引入考試中,在學生解決問題的同時,也提醒其時時刻刻要遵循防疫規定。
學期結束后,通過調查問卷的形式,針對教學、實踐和考試環節讓學生進行評價,結果如表3 所示。通過調查問卷可以發現,學生們對數據庫的課程改革基本比較滿意,相關知識點均掌握較好。

Table 3 Questionnaire of teaching and practice reform表3 教學與實踐效果調查問卷
通過融合式教學,80%以上的學生都能掌握事務隔離級別的設置,并能很好地理解掌握表空間的概念。在實踐環節利用表空間概念建立數據庫的步驟中,78%的學生都能建立表空間,再建立數據庫相應的表,而不是利用缺省的參數直接建表,從而加深了對物理設計的理解;10%的學生經過提醒后,能正確地理解表空間概念;10%左右的學生還是不太理解表空間的概念,經過打比方和目錄等概念的比較說明,在其他學生的幫助下才基本能夠理解。根據學生的專業特色設置不同教學方案,結果表明,85%以上的學生能較好地完成相應任務,其余15%的學生在參考了比較好的學生作業后,可以理解并進行修改,從而基本完成作業,表明其確實在程序編寫方面存在欠缺,利用計算機程序思維解決問題的能力需要提高,需要其他課程(例如高級程序設計)配合,通過多練習才能提升相關能力。在SQL 語句編寫課堂教學中,所有學生均能夠理解業務場景,15%左右的學生除缺少一個條件外,其余均能正確書寫。在課后作業中,80%的學生能編寫正確的SQL 語句。在以后的教學與實踐中,通過及時發現學習能力稍弱的學生,開展有針對性的幫助,可以進一步提高教學質量。
國產數據庫已經應用于各行各業,數據庫技術也隨著其他軟硬件發展和用戶需求的變化而快速發展。數據庫教學與實踐必須時刻關注、適應這種變化,才能使數據庫原理課程教學與實踐與時俱進,培養出的學生才能緊跟數據庫發展的潮流。