王鑫 劉寶林 張鋼 戴維迪



文章編號:1672-5913(2015)11-0054-04
中圖分類號:G642
摘要:針對數據庫原理課程實驗教學中使用商業數據庫產品作為實驗環境帶來的問題,分析數據庫原理課程的傳統實驗教學模式,構建基于開源軟件的數據庫原理實驗教學環境,介紹開源軟件的選取原則,闡述基于C/S架構的單機實驗環境和基于B/S架構的Web實驗環境的搭建方法,并給出基于開源軟件的實驗教學方案。
關鍵詞:數據庫原理;實驗教學;開源軟件;實驗環境
0 引 言
數據庫原理是計算機及相關專業的核心基礎課程。隨著大數據時代的到來,數據庫原理課程對于學生掌握數據理論和技術的重要作用更加凸顯。同時,數據庫是一個理論和實踐并重的知識領域。數據庫理論方法需要在數據庫管理系統(DBMS)中加以驗證,才能使學生加深對數據庫原理的理解。在國內,計算機及相關本科專業數據庫原理課程的實驗環節一般使用某個商業數據庫產品(如Oracle、SQL Server、DB2等)作為實驗教學的軟件環境。此做法主要存在兩方面的問題:①學生易被商業數據庫產品提供的繁雜功能分散注意力,花費大量時間進行用戶界面學習和文檔查閱,而非數據庫原理本身的實驗驗證;②學生無法從內部架構和源代碼層面理解數據庫理論方法背后的實現機制,不利于與本科生高年級或研究生的數據庫實現技術課程進行銜接。
1 數據庫原理課程傳統實驗教學模式
多年來,大多數本科數據庫原理課程教學存在一個誤區,即讓學生掌握數據庫基本理論的同時,掌握一個商業數據庫產品的操作方法。形成這種認識的原因是學生在學習完數據庫原理課程之后,應能勝任某商業數據庫產品的數據庫管理員(DBA)職位。然而實際情況是,以Oracle、SQL Server和DB2這三大數據庫為代表的商業產品,為適應市場需求,功能和界面頻繁更新且呈現復雜化趨勢,難以通過相對簡單的操作驗證數據庫原理知識點,相反會增加學生的學習負擔;即使能夠展示某些效果,由于產品的商業封閉性,也無法從內部結構和源代碼級別說明實現機理,例如關系表的存儲、索引的建立、SQL查詢的執行等。不使用商業數據庫的另一個原因是,作為一門本科課程應保持理論和實踐教學的中立性,沒有理由選擇一種產品作為實驗環境而不選擇另一種。至于培養DBA,實際上并不應在本科數據庫原理課程的教學目標之中。從國際一流計算機專業的課程設置來看,本科數據庫原理課程一方面使學生掌握數據庫系統及DBMS內部的基本原理和技術,另一方面為研究生階段的高級數據庫系統課程打基礎。學生要想勝任某商業數據庫產品DBA,可在學習完數據庫原理之后,通過其他途徑達到。
與操作系統原理和編譯原理相比,數據庫原理課程教學在開源軟件的使用上可謂相對滯后。操作系統原理教學中對Linux內核源代碼的分析和實驗早已在國內外高質量課程中普遍開展;應用開源編譯器及編譯工具的源代碼進行編譯原理的實驗驗證也已是精品編譯原理課程的普遍共識。不過,在數據庫原理教學中,國際上只發現CMU和Berkeley的數據庫課程采用開源的PostgreSQL作為期末大作業的DBMS;調查國內數據庫相關課程,尚未發現使用一整套開源軟件構建數據庫原理實驗教學環境的案例。
經過兩年的實驗教學改革探索,我們成功地構建起以MariaDB、HeidiSQL和phpMyAdmin等開源軟件為基礎的數據庫原理課程實驗教學環境,同時編寫了基于開源軟件的實驗指導教程,在基于開源軟件的數據庫原理課程實驗教學改革方面積累了一些經驗。
2 基于開源軟件的實驗教學環境
借鑒國際一流數據庫課程的先進經驗,我們對天津大學計算機科學與技術專業的本科數據庫原理課程實驗教學環節進行了改革,探索以MariaDB、HeidiSQL和phpMyAdmin等開源軟件取代商業產品,搭建數據庫原理課程實驗教學環境,并編寫基于開源軟件的實驗指導教程;在2013年和2014年兩屆課程的實驗教學中進行該項改革嘗試,通過調查問卷發現超過90%的學生認為基于開源軟件的實驗環境對于掌握數據庫原理優于商業產品,超過80%的學生認為進行基于開源軟件的數據庫原理實驗后,可以較容易地通過自學完成某種商業數據庫的基本操作。
2.1 開源軟件的選取
對于數據庫原理課程的實驗教學,最重要的是選取一個適合理論驗證又兼顧業界應用廣度的DBMS。前期我們調研了兩種主流開源數據庫PostgreSQL和MySQL,PostgreSQL雖然歷史悠久、功能強大,但其在安裝和使用的簡便性上遠不如MySQL,且PostgreSQL在Web開發的使用流行度也遠不及MySQL。據調查,包括國際著名互聯網公司Google、Facebook、Twitter和國內互聯網巨頭百度、騰訊、阿里巴巴在內的各大企業都在不同的產品中大量使用MySQL作為數據庫后臺。不過,我們沒有直接選用MySQL,而是選用了目前與MySQL完全兼容的開源數據庫MariaDB,原因有兩方面:一是MariaDB在多項性能上超越了MySQL;二是MySQL被Oracle公司收購后未來有被閉源的風險,而MariaDB是由MySQL原班人馬開發的,保證其開源性。
DBMS確定后,我們選取了兩種開源客戶端軟件:一種是Windows下C/S架構的圖形用戶界面(GUI)客戶端HeidiSQL;另一種是B/S架構的Web界面客戶端phpMyAdmin。選用這兩種客戶端軟件的目的是使學生從實驗環節中加深對DBMS的數據庫服務器屬性的認識。實驗環境配置說明、實驗步驟說明和實驗報告提交均采用基于開源軟件Moodle的e-learning教學平臺完成。圖1展示了基于開源軟件的數據庫原理實驗教學環境的架構圖。
2.2基于C/S架構的單機實驗環境
基于C/S架構的單機實驗環境適合學生在個人計算機上實驗,也適合教師演示操作。首先安裝MariaDB,安裝過程中可以改變默認安裝路徑,設置root用戶密碼,選擇使用UTF-8作為默認字符集以保存中文數據;可以修改安裝的Windows服務默認名稱MySQL以及默認TCP端口號3306(為了兼容MySQL)。另一種安裝方式是使用zip壓縮包文件,解壓后執行其中的命令行工具mysql_install_db.exe進行MariaDB安裝。
單機實驗環境采用Windows下的開源GUI客戶端HeidiSQL,其安裝簡單,不需要特別設置。在HeidiSQL的會話管理器界面中輸入連接MariaDB數據庫服務器所需的全部信息,包括網絡類型為MySQL(TCP/IP),主機名/IP為127.0.0.1,填寫root用戶及其密碼,端口為3306。成功地連接到MariaDB數據庫服務器后,在HeidiSQL中執行SQL語句及返回查詢結果的界面如圖2所示。需要強調的是,在會話管理器界面中可將“主機名/IP”改為想要連接的數據庫服務器的主機名或IP地址,以實現遠程連接MariaDB數據庫,使學生認識數據庫的C/S架構。
2.3 基于B/S架構的Web實驗環境
基于B/S架構的Web實驗環境適合學生通過網絡遠程進行數據庫實驗操作或進行集中的上機實驗考核。環境的搭建首先需要設立一臺專門用于實驗教學的性能較好的物理服務器,安裝MariaDB和phpMyAdmin,使phpMyAdmin可以管理MariaDB實例。在整個課程開始前,教師先為每名學生建立一個用戶和一個數據庫,并為該用戶指定遠程訪問、操作該數據庫的權限。例如,下列代碼創建了一個以學號“3012216001”為用戶名的用戶,指定其密碼為123456;創建了名為“db3012216001”的數據庫,并將該數據庫上的ALTER、CREATE、DELETE、DROP、INSERT、SELECT等操作權限授予該用戶。我們編寫程序讀取一屆學生的學號列表,對每名學生自動生成如下SQL腳本,進行用戶和數據庫的批量創建和授權操作。
學生以自己的用戶名和密碼登錄phpMyA-dmin,只能訪問并操作自己專用的數據庫。高性能的數據庫服務器完全有能力支持學生的并發操作,每名學生獨立地使用各自的數據庫進行實驗,DBMS的隔離性恰好保證了多名學生同時操作互不影響。圖3展示了學號為“3012216001”的學生登錄phpMyAdmin后, 在數據庫“db3012216001”中執行SQL語句的效果。
Web實驗環境還為實驗教學管理工作帶來了兩個方面的提升:一是教師可以通過phpMyAdmin自帶的工具查看每名學生數據庫的日志,從而客觀真實地分析每名學生課下進行實驗練習的工作量;二是教師可以在該環境下組織上機實驗測試,并將日志記錄的數據庫操作及數據庫中的對象作為測試結果的準確評價依據。
3 基于開源軟件的實驗教學方案
天津大學計算機科學與技術專業數據庫原理課程為64學時,其中授課為40學時,實驗為24學時。考慮到數據庫原理課程理論性緊密結合實踐性的特點,給學生布置的驗證性實驗和綜合實驗需要中等水平的學生再利用課下大約60學時的時間完成。
3.1 數據庫原理的驗證性實驗
驗證性實驗應緊密結合課上講解的理論和方法。表1列出了8次驗證性實驗的名稱及課上、課下學時分配以及所驗證的理論知識點。實驗安排做到了覆蓋全部課上講解的可實踐驗證的理論知識點,并突出重點和難點內容。我們編寫了實驗指導教程,每個實驗都有實驗目的、實驗原理和實驗步驟。結合實驗內容的難易程度,部分實驗步驟還給出啟發式示例。
3.2 以項目為主線的綜合實驗
綜合實驗屬于期末大作業性質,課上布置和輔導8學時,中等水平學生估計課下需要約30學時完成。該實驗以一個軟件項目的數據庫設計為背景,提供經整理的用戶需求文字性描述,例如,網上商城、圖書管理、員工管理等系統的后臺數據庫設計需求。
實驗步驟包括:
(I)首先要求畫出數據庫的E/R模型圖。
(2)將E/R模型轉換為關系模型,寫出創建關系表的CREATE TABLE語句,這里要求用CONSTRAINT關鍵字建立有名稱的主鍵和外鍵約束,并規定主鍵名稱格式為“pk_表名”,外鍵名稱格式為“fk本表名 引用表名”。
(3)將提供的示例數據導入已創建的表中,其中部分表提供行數為百萬級別的大規模數據,以增加實驗的挑戰性,同時可以驗證索引的效果,讓學生自學如何使用MariaDB提供的批量導人數據語句LOAD DATArNFILE。
(4)編寫SQL語句完成查詢操作,包括單表查詢(大規模表的前k行,自學LIMIT關鍵字用法)、復合條件、聚合函數、分組、排序、自然連接、連接(舊式語法、新式JOIN…ON語法)、子查詢(不相關、相關)和集合操作等。
(5)編寫SQL語句完成更新操作,包括添加、修改和刪除。
(6)高級主題,包括觸發器實驗(實現自動審計日志)、基于已有表建立視圖、索引的作用(在大規模表上建立索引大幅提高查詢執行效率)、索引與鍵(主鍵上自動建立索引)、建立存儲過程(函數、分支、循環、游標)、JDBC編程等。
(7)撰寫不少于500字的實驗總結,記錄實驗中遇到的問題及解決方法、經驗和收獲等。
該綜合實驗既有對驗證性實驗中知識點的鞏固性重復,又有需要學生進行自學和探索的綜合性、挑戰性內容,達到了綜合實驗的設計目標。
4 結語
通過在數據庫原理實驗教學中引入基于開源軟件的實驗環境,充分發揮開源軟件的優勢,利用C/S架構單機實驗環境和B/S架構Web實驗環境相結合的方法,我們設計數據庫原理驗證性實驗教學方案和以項目為主線的綜合性實驗教學方案,切實提高了數據庫原理課程的實驗教學效果。