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