摘要:本文針對(duì)目前數(shù)據(jù)庫(kù)原理課程實(shí)踐教學(xué)中存在諸多弊病,設(shè)計(jì)了數(shù)據(jù)庫(kù)系統(tǒng)原理的UBase綜合訓(xùn)練項(xiàng)目,該項(xiàng)目對(duì)于系統(tǒng)地鍛煉學(xué)生的實(shí)踐能力和動(dòng)手能力具有一定的啟發(fā)指導(dǎo)作用。
關(guān)鍵詞:數(shù)據(jù)庫(kù);UBase項(xiàng)目;實(shí)踐教學(xué)
中圖分類號(hào):G642
文獻(xiàn)標(biāo)識(shí)碼:B
文章編號(hào):1672-5913(2008)06-0039-02
在數(shù)據(jù)庫(kù)原理課程教學(xué)中,實(shí)踐教學(xué)具有特別重要的地位。然而傳統(tǒng)實(shí)踐教學(xué)模式存在諸多弊病,改革勢(shì)在必行。我院在此認(rèn)識(shí)的基礎(chǔ)上,設(shè)計(jì)了數(shù)據(jù)庫(kù)系統(tǒng)原理UBASE綜合訓(xùn)練項(xiàng)目,通過(guò)完成UBASE綜合實(shí)驗(yàn)進(jìn)一步提高學(xué)生的實(shí)踐動(dòng)手能力。
1UBase項(xiàng)目簡(jiǎn)介
UBase項(xiàng)目是一個(gè)綜合性很強(qiáng)的設(shè)計(jì)開(kāi)發(fā)項(xiàng)目,在完成整個(gè)項(xiàng)目的過(guò)程中將涉及到以下10門(mén)課程的相關(guān)知識(shí),包括“數(shù)據(jù)結(jié)構(gòu)”、“數(shù)據(jù)庫(kù)系統(tǒng)原理”、“SQL語(yǔ)言”、“數(shù)據(jù)庫(kù)系統(tǒng)實(shí)現(xiàn)”、“C程序設(shè)計(jì)”、“C++程序設(shè)計(jì)”、“軟件工程”、“編譯原理”和“Linux操作系統(tǒng)”等課程。
UBase項(xiàng)目引導(dǎo)學(xué)生掌握設(shè)計(jì)開(kāi)發(fā)一個(gè)名為UBase的數(shù)據(jù)庫(kù)管理系統(tǒng)的方法,學(xué)生將親手開(kāi)發(fā)一個(gè)單用戶、可以執(zhí)行一些簡(jiǎn)單SQL查詢的DBMS。通過(guò)該項(xiàng)目的實(shí)踐,可以讓學(xué)生弄明白DBMS的組成結(jié)構(gòu),也會(huì)明白執(zhí)行查詢時(shí)DBMS內(nèi)部究竟發(fā)生了什么?
為了幫助學(xué)生順利完成項(xiàng)目,在實(shí)驗(yàn)開(kāi)始之前,我們提前提供了UBase DBMS的最頂層和最底層模塊。最頂層模塊為解析器,用于對(duì)SQL查詢的解析并調(diào)用下層相應(yīng)的功能以實(shí)施各種關(guān)系操作;最底層模塊為磁盤(pán)的I/O層,用于從磁盤(pán)讀數(shù)據(jù)頁(yè)和向磁盤(pán)寫(xiě)數(shù)據(jù)頁(yè),這里的磁盤(pán)是指UNIX文件系統(tǒng)。
2UBase的體系結(jié)構(gòu)
UBase的體系結(jié)構(gòu)如圖1所示,頂層的解析器和底層的磁盤(pán)的I/O層管理由教師提供,由學(xué)生負(fù)責(zé)完成中間的五部分。

圖1UBase的體系結(jié)構(gòu)
3開(kāi)發(fā)環(huán)境
UBase項(xiàng)目使用C++在Linux平臺(tái)下完成。編譯時(shí)在Makefile文件中加上CXXFLAGS = -g -Wall(表示打開(kāi)所有警告)選項(xiàng),可以讓C++在編譯時(shí)進(jìn)行很多檢查,從而減少運(yùn)行時(shí)錯(cuò)誤。編輯工具采用vi源程序編輯器;程序編譯和連接工具選用make;編寫(xiě)測(cè)試程序的腳本語(yǔ)言用perl;使用purify跟蹤內(nèi)存錯(cuò)誤的工具;使用gdb作為調(diào)試工具;使用cvs版本作為控制工具。
4UBase項(xiàng)目的實(shí)驗(yàn)內(nèi)容設(shè)計(jì)
UBase項(xiàng)目分為五個(gè)部分。第一部分實(shí)現(xiàn)緩存管理模塊,第二部分實(shí)現(xiàn)在頁(yè)上存儲(chǔ)變長(zhǎng)記錄的類,第三部分實(shí)現(xiàn)堆文件,第四部分實(shí)現(xiàn)數(shù)據(jù)字典和一些應(yīng)用工具,第五部分實(shí)現(xiàn)一些關(guān)系操作符。UBase項(xiàng)目的目標(biāo)是實(shí)現(xiàn)一個(gè)迷你數(shù)據(jù)庫(kù)管理系統(tǒng)(UBase),雖然其功能遠(yuǎn)比不上商業(yè)DBMS,但確實(shí)可以執(zhí)行一些相當(dāng)有用的查詢。
4.1磁盤(pán)空間管理模塊
UBase數(shù)據(jù)庫(kù)管理系統(tǒng)的最底層為磁盤(pán)I/O層。該模塊為UBase上層提供創(chuàng)建文件;刪除文件;打開(kāi)文件;關(guān)閉文件;在文件中分配磁盤(pán)頁(yè);回收文件中磁盤(pán)頁(yè);讀文件中磁盤(pán)頁(yè);向文件寫(xiě)磁盤(pán)頁(yè)和取文件首頁(yè)頁(yè)號(hào)的功能,該模塊包括2個(gè)類:一個(gè)為文件類(class File),另一個(gè)為數(shù)據(jù)庫(kù)類(class DB)。該模塊的具體實(shí)現(xiàn)(源代碼)由教師提供,學(xué)生可以直接使用,但要求學(xué)生必須仔細(xì)閱讀文檔及源代碼,了解該實(shí)現(xiàn)的細(xì)節(jié)有助于完成項(xiàng)目的其他部分。
4.2緩存管理模塊
緩存管理模塊要為UBase數(shù)據(jù)庫(kù)管理系統(tǒng)實(shí)現(xiàn)一個(gè)緩存管理器。由于數(shù)據(jù)庫(kù)本身的大小通常為可用內(nèi)存的100到1000倍,在特定時(shí)刻,內(nèi)存中只能存放數(shù)據(jù)庫(kù)的一小部分,緩存管理器就是用來(lái)控制哪些頁(yè)應(yīng)該駐留在內(nèi)存中。每當(dāng)UBase的上層模塊發(fā)出數(shù)據(jù)頁(yè)請(qǐng)求,緩存管理器必須檢查請(qǐng)求的頁(yè)是否已經(jīng)在緩存池。如果在,緩存管理器只需簡(jiǎn)單地返回該頁(yè)的指針;如果不在,緩存管理器要騰出一幀(如果該幀已臟,就必須先將其寫(xiě)入磁盤(pán)),然后將請(qǐng)求的頁(yè)從磁盤(pán)讀入到內(nèi)存中騰出的幀。由于緩存池通常包含上千幀(大型數(shù)據(jù)庫(kù)管理系統(tǒng)在內(nèi)存中分配上GB的緩存)。每次頁(yè)請(qǐng)求都順序搜索一遍緩存池會(huì)影響性能,解決的辦法是用溢出桶散列表跟蹤每個(gè)緩存幀的狀態(tài)。
UBase項(xiàng)目的緩存替代策略采用給幀加Love/Hate標(biāo)記的算法和時(shí)鐘算法,其效果類似LRU和MRU。
緩存管理器包含三個(gè)類:
(1) BufMgr類,緩存管理器的主類。
(2) BufHashTbl類,用來(lái)形成映射文件及頁(yè)號(hào)到緩存池幀號(hào)的散列表。
(3) BufDesc類,用來(lái)跟蹤每個(gè)緩存幀的狀態(tài)。
BufMgr類只有一個(gè)實(shí)例。BufMgr類的一個(gè)關(guān)鍵組成部分就是緩存池本身,是用幀數(shù)組實(shí)現(xiàn)的。BufHashTbl類也只有一個(gè)實(shí)例,該實(shí)例將是BufMgr類的一個(gè)私有數(shù)據(jù)成員。假設(shè)緩存池總共包含N個(gè)幀,則BufMgr類將擁有另外一個(gè)私有數(shù)據(jù)成員,他是由包含N個(gè)BufDesc類實(shí)例的矢量組成的。
除了以上的類和類的實(shí)例,還有一個(gè)“未釘住的”(unpinned)緩存池幀的雙向鏈表?!拔瘁斪 笔侵府?dāng)前沒(méi)有被數(shù)據(jù)庫(kù)管理系統(tǒng)上層對(duì)象使用的幀,因而是可以被緩存管理器交換出內(nèi)存的犧牲品?!搬斪〉摹?Pinned)頁(yè)是永遠(yuǎn)不能被選中為替代對(duì)象的。這個(gè)雙向鏈表是通過(guò)把BufDesc類的所有實(shí)例鏈接在一起而實(shí)現(xiàn)的,指向該雙向鏈表兩端的指針是BufMgr類的私有數(shù)據(jù)成員。
4.3頁(yè)上存儲(chǔ)變長(zhǎng)記錄的類
在UBbase的第二部分,要求實(shí)現(xiàn)一個(gè)page類。頁(yè)在數(shù)據(jù)庫(kù)中用來(lái)存放記錄,同時(shí)也是磁盤(pán)和緩存池交換數(shù)據(jù)的單位。緩存池在項(xiàng)目的第一部分實(shí)現(xiàn),一頁(yè)可以存放1到多條變長(zhǎng)記錄,記錄是按插槽結(jié)構(gòu)存儲(chǔ)的。在這一部分,Page類的定義已經(jīng)提供,要求學(xué)生通過(guò)代碼完成對(duì)Page類的插入、刪除、更新記錄,得到下一條記錄、當(dāng)前記錄等具體操作。
4.4堆文件
UBase項(xiàng)目第三部分要實(shí)現(xiàn)一個(gè)堆文件管理器,用于提供文件的掃描功能、過(guò)濾功能(查找功能)、記錄插入功能及記錄的刪除功能等。堆文件層包括三個(gè)主要的類:FileHdrPage類,通過(guò)目錄頁(yè)(頁(yè)號(hào)的數(shù)組)實(shí)現(xiàn)堆文件結(jié)構(gòu);HeapFile類,實(shí)現(xiàn)記錄的插入和刪除功能;HeapFileScan類(從HeapFile類繼承而來(lái)),實(shí)現(xiàn)文件的掃描功能和過(guò)濾功能(查找功能)。
4.5數(shù)據(jù)字典和一些應(yīng)用工具
項(xiàng)目的第四部分將實(shí)現(xiàn)UBase一些前端命令和數(shù)據(jù)庫(kù)應(yīng)用工具,同時(shí)還要實(shí)現(xiàn)UBase的數(shù)據(jù)字典表的管理。為了幫助學(xué)生實(shí)現(xiàn)UBase前端命令,我們事先為學(xué)生提供了一個(gè)解析器來(lái)解析用戶命令和SQL命令(一個(gè)子集)。該解析器從標(biāo)準(zhǔn)輸入讀入一行命令,解析該行命令并調(diào)用適當(dāng)?shù)暮笈_(tái)函數(shù)進(jìn)行處理。
4.6關(guān)系操作符
在UBase項(xiàng)目的第五部分,要實(shí)現(xiàn)查詢、插入和刪除操作的功能。查詢包括選擇、投影及連接算法,完成創(chuàng)建數(shù)據(jù)庫(kù)、新建表,查看表結(jié)構(gòu)、向表中插入記錄、刪除表中的記錄、修改表中的記錄、查詢表中的記錄、刪除表結(jié)構(gòu)、刪除數(shù)據(jù)庫(kù)等基本功能。
5測(cè)試程序的設(shè)計(jì)
在UBase項(xiàng)目的每一部分,都設(shè)計(jì)了測(cè)試程序,通過(guò)運(yùn)行可執(zhí)行的測(cè)試程序可以檢查學(xué)生完成目標(biāo)的準(zhǔn)確性。
6評(píng)分標(biāo)準(zhǔn)
學(xué)生完成項(xiàng)目的某個(gè)部分后,必須提交源代碼。實(shí)驗(yàn)課教師將檢查源代碼,編譯、運(yùn)行和測(cè)試程序的準(zhǔn)確性。每部分的評(píng)分標(biāo)準(zhǔn)如表1所示:

7UBase項(xiàng)目的實(shí)施效果
數(shù)據(jù)庫(kù)原理UBase項(xiàng)目設(shè)計(jì)完成之后,考慮到本科學(xué)生實(shí)際動(dòng)手能力和對(duì)知識(shí)理解深度的欠缺,先由新疆農(nóng)業(yè)大學(xué)計(jì)算機(jī)與信息工程學(xué)院的6名研究生和11名本科生具體實(shí)施,完成學(xué)生用UBase系統(tǒng)的框架設(shè)計(jì)之后,將UBase項(xiàng)目作為計(jì)算機(jī)科學(xué)與技術(shù)042班和信息管理與信息系統(tǒng)042班共144名學(xué)生的數(shù)據(jù)庫(kù)系統(tǒng)原理實(shí)驗(yàn)課的必修作業(yè)。現(xiàn)已完成教師用UBase項(xiàng)目的完整系統(tǒng)和UBase項(xiàng)目的實(shí)習(xí)手冊(cè),并開(kāi)設(shè)了UBase項(xiàng)目的學(xué)習(xí)網(wǎng)站和學(xué)習(xí)論壇,供學(xué)生和教師在線交流。經(jīng)過(guò)一年多的實(shí)踐,UBase項(xiàng)目在學(xué)生中收到預(yù)期的效果,鍛煉了學(xué)生的動(dòng)手能力和實(shí)踐能力,也加深了學(xué)生對(duì)相關(guān)理論知識(shí)的理解,提高了學(xué)生學(xué)習(xí)理論知識(shí)的興趣。
參考文獻(xiàn)
[1] 瞿中. 數(shù)據(jù)庫(kù)教學(xué)方法改革的探索與實(shí)踐[J]. 黑龍江高教研究,2006,2(142):113-114.
[2] 胡軍,夏英,王國(guó)胤. “賽課結(jié)合”在數(shù)據(jù)庫(kù)原理實(shí)踐教學(xué)中的探索[J]. 實(shí)驗(yàn)室研究與探索,2007,26(12):267-269.