黎孟雄, 郭鵬飛
(1. 江蘇師范大學連云港校區 數學與信息工程學院, 江蘇 連云港 222006;2. 連云港師范高等專科學校 數學與信息工程學院, 江蘇 連云港 222006)
?
基于SQLite的數據庫原理自主實驗平臺設計
黎孟雄1,2, 郭鵬飛2
(1. 江蘇師范大學連云港校區 數學與信息工程學院, 江蘇 連云港 222006;2. 連云港師范高等專科學校 數學與信息工程學院, 江蘇 連云港 222006)
為了解決傳統的數據庫原理實驗教學及一般的數據庫在線實驗軟件所面臨的一些問題,設計和實現了基于SQLite的數據庫原理的自主實驗平臺。該平臺的總體結構包括SQL主題學習模塊、SQL實驗練習模塊、智能答疑模塊和實驗過程監管模塊。詳細闡述了平臺的體系結構、核心功能及其實驗平臺的構建、SQL語法檢查、FAQ自動采集和實驗過程監管等關鍵技術,給出了關鍵函數調用程序。
數據庫原理課程; 自主實驗平臺; SQLite
數據庫是信息化建設的基石,幾乎所有的計算機應用軟件都構建于數據庫系統之上。因此,“數據庫原理”課程已成為高校計算機、信息管理、電子商務等專業的必修課,也是一門理論和實踐結合非常緊密的數據庫系列基礎課。在課程實驗環節,重點是結構化查詢語言(structured query language,SQL)的上機練習。SQL是最重要的非過程化關系數據庫操作語言,用于數據存取以及查詢、更新和管理關系數據庫系統。
盡管SQL具有集數據定義、數據操縱、數據控制等功能于一體,語言風格統一和簡潔易學的特點,但在“數據庫原理”實際教學中卻存在理論和實踐脫節的現象,學生上機操作總是感覺無所適從[1]。除教學方法問題外,實驗課時太少、課外實驗缺乏監管和指導也是影響學生對理論知識的理解、實踐知識轉化的重要原因。
為了突破傳統實驗教學受時間、場地、軟硬設備和師資條件的制約,一些高校開發了基于Web的數據庫在線實驗環境[2-3]。這些實驗平臺雖然在數據庫課程實驗教學中取得了較好的效果,但要求學生在實驗時必須實時聯網,一旦斷網離線則不能使用。為了給學生提供一個更加方便、易用的實驗環境,筆者設計了基于SQLite的數據庫原理自主實驗平臺。該平臺軟件為綠色版且無需安裝,解壓后可直接使用;軟件壓縮包體積小,也方便學生用U盤、手機隨身攜帶。
SQLite是一款開源的輕量級嵌入式關系型數據庫管理系統,完全支持T-SQL標準語言,支持事務(transaction)處理、觸發器(trigger)和復雜查詢[4]。SQLite數據庫系統本身采用C語言編寫,體積非常小,包含在一個不到500 KB的C語言庫中。SQLite的數據庫引擎不像Oracle、Sybase等大型Client/Server數據庫管理系統的引擎那樣使用應用程序與之通信的獨立進程;相反,SQLite庫可以被編譯到應用軟件中,成為程序的內嵌模塊,應用程序可以方便地調用API函數來使用SQLite的功能。與進程間通信相比,在數據處理的速度上API調用效率更高。
除了小巧、高效外,SQLite還有以下幾個優點:
(1) 跨平臺。SQLite除了支持所有主流計算機操作系統如Max OS、Linux、Windows和Unix之外,甚至很多手機、平板電腦的移動操作系統同樣可以運行,例如Android、iOS、Windows Phone、Symbian等。
(2) 多語言接口。SQLite提供了為數眾多的編程語言接口,例如C/C++、Java、Python、dot Net、Ruby、PHP、Perl、Common Lisp和Smalltalk等,因而受到很多開發者的喜愛。據SQLite的官方網站稱,SQLite是目前使用最廣泛的數據庫系統,就數量而言,已經超越Oracle、Microsoft Sql Server、Sybase、IBM DB2、My Sql和Microsoft Access的總和。
(3) 獨立性。SQLite的核心引擎不依賴任何第三方軟件,使用它簡單、靈活、可靠。基于SQLite的應用軟件也完全可以做到無需安裝和管理配置。
在基于SQLite的數據庫原理自主實驗平臺上練習SQL語句的時候,除了能像在真實的大型數據庫管理系統里一樣執行并顯示結果外,系統還具有精確的錯誤診斷功能,可以探測并定位到SQL程序運行過程中的錯誤知識點,根據需要給出錯誤原因和相應的SQL命令范例。另外,系統平臺會對學生用戶全部上機實驗過程進行記錄,并在聯網的時候反饋給教師,起到一定的實驗監管作用。
該平臺的總體結構包括4個核心功能模塊:SQL主題學習模塊、SQL實驗練習模塊、智能答疑模塊和實驗過程監管模塊。
(1) SQL主題學習模塊。實驗平臺有豐富、齊全的保存在SQLite本地數據庫里的主題學習資源,包括數據庫和表的創建、使用,數據記錄的增、刪、改操作,簡單查詢和復雜查詢,SQL高級應用,索引和視圖,存儲過程和觸發器,安全性和完整性管理,數據備份和轉換等。
(2) SQL實驗練習模塊。練習模塊是實驗平臺最重要的模塊,分自由練習部分和任務分配部分。自由練習部分是學生為了驗證自己的想法、思路去實現某個數據庫操作或功能而編寫、測試SQL程序;任務分配指的是學生必須完成的SQL相關知識的實驗練習,該模塊實驗目的、要求和內容都非常明確,分配給學生的實驗題目是隨機生成的。
(3) 智能答疑模塊。在數據庫原理的實驗過程中,大部分學生遇到的實驗難點主要是些常規問題,所以實驗平臺設計了FAQ(frequently asked questions)知識庫。為了降低學生檢索問題的難度,實驗平臺還嵌入了智能導學機器人,以仿騰訊QQ、微軟MSN等傳統即時消息軟件的會話方式來構建人機互動和構建智能答疑環境[4]。導學機器人模擬任課教師對學生進行即時指導的聊天式答疑風格,能使學生在枯燥乏味的實驗環境中體驗學習的樂趣。
(4) 實驗過程監管模塊。學生每一次進入實驗平臺上機練習的全過程,包括起始時間、結束時間、有效實驗時間、實驗進度、任務分配、實驗結果等,都會被自動記錄在SQLite數據庫中,并在隨后的時間里一旦檢測到計算機聯網,即會把實驗過程監管記錄發送給任課教師。
3.1 實驗平臺的構建
數據庫原理自主實驗平臺基于Microsoft .NET框架,采用C#語言開發,其開發環境和運行部署的SQLite數據庫驅動都只需要一個System.Data.SQLite.dll動態鏈接庫文件即可,該程序符合ADO.NET的規范,并且支持Visual Studio的可視化表設計器。
由于所有的SQL主題學習資源、任務實驗練習試題和FAQ知識庫全部保存在本地SQLite數據庫文件中,為了避免數據的完整性和安全性受到影響,學生實驗時的所有數據操作都是基于另外一個單獨的專用練習數據庫,并且設計了基于多級角色的安全訪問功能[5]。
實驗平臺的軟件界面主要由SQL主題學習模塊的資源分類呈現單元和實驗練習模塊的SQL程序執行單元構成,核心在SQLite的數據庫操作,關鍵函數調用如下:
CSqlite csqlite = new CSqlite(@″D:sqlite3dbStudent.db″);
//創建數據庫對象,參數為數據文件路徑
csqlite.Open(); //打開數據庫
csqlite.BeginTransaction(); //開啟事務
public DataTable ExecuteQueryTable(string sqlCmd); //執行SQL命令,并返回DataTable
public int ExecuteNonQuery(string sqlCmd); //執行SQL命令,返回影響行數
csqlite.Commit(); //提交事務
csqlite.Rollback(); //回滾事務
csqlite.Dispose(); //關閉數據庫
基于SQLite的數據庫原理自主實驗平臺的功能界面如圖1所示。

圖1 數據庫原理自主實驗平臺功能界面圖
3.2 SQL語法檢查
實驗平臺采用開源語法分析器ANTLR對SQL源程序進行語法檢查和診斷。ANTLR可以接收上下文無關的語法規則描述,通過解析用戶定義的語法規則來識別輸入語句,并根據需要自動生成多種語言的源代碼程序,包括Java、Python和C#等[6]。作為翻譯程序的一部分,ANTLR可以允許使用簡單的操作符和動作來表達語法規則,從而較為輕松地創建抽象語法樹和產生最終輸出信息。
ANTLR的SQL語法檢查流程分為詞法分析和語法分析兩個步驟。
在詞法分析階段,需要先定義SQL程序中的各種關鍵字、標識符和操作符,如create、select、from、where、=、<>等詞元(token),然后對SQL程序進行預處理,例如過濾空格、回車、換行及注釋等,再由詞法分析器(lexer)把輸入的程序代碼文本的字符流識別成離散的Token序列[7]。
在語法分析階段,語法分析器(parser)的解析程序根據預先定義的SQL語法規則,對Token序列進行語法分析,建立層次化的抽象語法樹(AST),并在AST對象的基礎上配合元數據管理系統進行語義檢查工作。語義檢查主要是進行表實體、屬性及其關系檢查。
對SQL語法規則的準確描述是實現其語法檢查的關鍵,以查詢語句為例,語法規則表達式如下:
tokens {SQL_STATEMENT;SELECT_LIST;TABLE_REFERENCE_LIST;WHERE_CONDITIONG;SUBQUERY;}
start_rule:(sql_statement)*EOF;
sql_statement:sql_command(SEMI)?
{#sql_statement = #([SQL_STATEMENT,″sql_statement″],#sql_statement);}
select_expression:
″select″ (″all″|″distinct″) ? select_list
″from″ table_reference_list
(″where″ where_condition) ? (connect_clause) ? (group_clause) ?
((set_clause) => set_clause) ? ((order_clause) => order_clause) ?
((update_clause) => update_clause);
select_list:
((displayed_column) => displayed_column (COMMA displayed_column)*
| LBRACKET table_name DOT ASTERISK RBRACKET)
{#select_list = #([SELECT_LIST,″select_list″]),#select_list;};
3.3 FAQ自動采集
知識資源豐富的高質量FAQ是實現智能答疑的基礎。為了快速、高效地構建“數據庫原理”FAQ,實驗平臺利用垂直網絡蜘蛛(spider)進行自動采集,具體步驟如下。
首先,根據“數據庫原理”課程生成所有知識點的主題關鍵詞表,Spider按關鍵詞依序從指定網站“百度知道”抓取主題相關的網頁集。“百度知道”是由百度自主研發、基于搜索的互動式知識問答分享平臺,提供了眾多領域的海量問答資源。針對“百度知道”平臺中“數據庫原理”課程關聯知識的分布式特點,Spider采用增量式采集和最佳優先算法,在提高查全率的同時,盡量提高知識資源的搜索效率。
然后,把經過PageRank算法排序的抓取網頁集作為樣本進行去噪、解析成Dom頁面集[8],并根據FAQ語義數據模型對Dom頁面集進行標記,建立頁面信息內容與FAQ知識對象的對應關系。網頁去噪的基本方法是利用各種通用的特征來區分有效正文內容和頁眉、頁腳、廣告等其他信息[9]。其中最常用的特征是鏈接文字比率。FAQ使用HtmlAgilityPack把HTML轉換為Dom樹,再對每個節點計算鏈接文字比率,如果高于25%就把該節點去掉。
最后,直接采集Dom樹頁面子節點的有效正文內容,存入FAQ知識庫并建立其數據庫文檔的倒排索引,包括正向索引和反向索引。由于倒排索引的大小可能和文檔內容本身差不多,尤其當文檔數量較多時,為了節省數據庫存儲空間,可以采用壓縮格式存儲倒排索引。
Spider在“百度知道”站點實現網頁自動抓取的主要流程如下:
Static List
Static List
Static List
Public void Crawler(){ //網絡蜘蛛的開始點
RequestSite(startpointAdress); //訪問種子站點
While (doto.Count > 0 ) { //如果有需要遍歷的鏈接,則逐個遍歷}}
Todo.AddRange(GetLinks(s)); //增加鏈接到隊列尾部
todo
3.4 實驗過程監管
嚴格的實驗過程監管可以對學生形成正面導向和牽引的力量;基于實驗過程的考核評價方法能對學生起到一定的鞭策和督促作用[10]。因此,數據庫原理自主實驗平臺設計了實驗過程監管模塊。學生每一次實驗的登錄時間、結束時間、有效實驗時間、實驗練習的SQL程序及其運行狀態等實驗過程數據信息,甚至包括主題資源的學習進度都會被自動記錄在SQLite數據庫中。當實驗平臺檢測到計算機聯網時就會在后臺通過電子郵件方式自動把實驗過程監管記錄發送給任課教師。
C#中一般有兩種方法來判斷計算機是否連接互聯網。第一種是通過調用cmd中的ping命令,分析輸出信息來確定網絡是否連接;第二種是調用win32的API函數InternetGetConnectedState()返回本地系統的網絡連接狀態。因為第一種方式受到ping時延的影響,在某些不支持ping的地址或者網段甚至不可用,所以實驗平臺采用第二種方法,語法為BOOL InternetGetConnectedState(LPDWORD lpdwFlags,DWORD dwReserved)。其中參數lpdwFlags返回當前網絡連接狀態,dwReserved是保留參數,設置為0即可。
另外,由于Microsoft .NET類庫中的SmtpClient類已經對SMTP協議實現了完美封裝[11-12],當系統平臺在發送電子郵件的時候只需要調用SmtpClient類的相關方法和函數,非常方便。
郵件發送方法:
private void SendMail(SmtpClient client,MailAddress from,string p, MailAddress to, MailMessage message) {
client.UseDefaultCredentials = false;
client.Credentials = new NetworkCredential(from.Address, p);
client.DeliveryMethod = SmtpDeliveryMethod.Network; //郵件通過網絡發送到服務器
client.Send(message);
message.Dispose(); //及時釋放占用資源 }
其中MailAddress用于提供發件人和收件人的郵件地址,MailMessage用于提供郵件的信息,包括主題、內容、附件、信息類型等。
基于SQLite的數據庫原理自主實驗平臺用于實驗教學,學生可以不受時間、地點、網絡環境的限制,非常方便地獨立完成SQL的實驗操作。該實驗平臺軟件界面友好、功能實用,不僅能對SQL程序實現精確的語法檢查和診斷,還可以自動生成實驗報告。盡管智能導學機器人在智能答疑環節能通過中文分詞和問句相似度計算、從FAQ知識庫中推薦最佳答案,但未能根據學生的學識水平進一步予以個性化的主題資源學習導航。所以,基于SQLite的數據庫原理自主實驗平臺需要進一步完善學生模型和擴充學習資源庫,以便機器人能根據學生的學習能力和實驗水平進行差異化導學,使實驗平臺成為學生理想的“數據庫原理”學習平臺。
References)
[1] 黃德才,龔衛華.“數據庫原理及應用”實驗模塊的組織原則與教學實踐[J].計算機教育,2009(10):169-171.
[2] 郭東偉,于明光,劉淼.數據庫應用實驗在線自動測評環境[J].實驗室研究與探索,2011,30(5):60-63.
[3] 劉文菊,柯永振,時珍全,等.基于Web的數據庫遠程自主實驗平臺[J].現代教育技術,2010,20(3):132-134.
[4] 黎孟雄.基于IM的智能導學機器人的研究與設計[J].現代教育技術,2013,23(1):97-101.
[5] 白晉國,胡澤明,孫紅勝.基于RBAC模型多級角色的SQLite3安全訪問控制[J].計算機系統應用,2015,24(5):177-182.
[6] 王海燕,楊鶴標.基于ANTLR的SQL語法分析策略與實現[J].計算機應用與軟件,2013,30(11):68-70.
[7] 孫兆玉,朱鴻宇,黃宇光.一種SQL語法分析的策略和實現[J].計算機應用,2007,27(6):18-23.
[8] Richardson M, Domingos P. The intelligent surfer: probabilistic combination of link and content information in PageRank[J].Advances in Neural Information Processing Systems,2001,14:1441-1448.
[9] 吳思竹,張智雄.基于網頁特征識別的噪音網頁過濾方法研究[J].情報理論與實踐,2011,34(4):111-114.
[10] 王魯云,張明君,王穎,等.實驗課教學過程管理模式的改革與實踐[J].實驗技術與管理,2013,30(6):102-104,117.
[11] 李福紅,于九九.C#開發郵件工具[J].電腦編程技巧與維護,2013(3):30-36.
[12] SmtpClient[EB/OL].[2016-03-15].https://msdn.microsoft.com/zh-cn/library/system.net.mail.smtpclient(VS.80).aspx.
Design of self-experimental platform based on Database Principle of SQLite
Li Mengxiong1,2, Guo Pengfei2
(1. School of Mathematics and Information Engineering, Jiangsu Normal University, Lianyungang 222006, China;2. School of Mathematics and Information Engineering, Lianyungang Normal College, Lianyungang 222006, China)
In order to solve the problems faced by the traditional experimental teaching of Database Principle and its common online experimental software,this paper designs and completes a self-experimental platform based on the Database Principle of SQLite. The general structure of the platform includes SQL-subject learning module, SQL experimental exercise module, intelligent question answering module and experimental process supervision module. The key technologies for the systematic structure of this platform, its core function, formation,SQL grammar checking,FAQ automatic collection and experimental processing supervision are described in detail, and the key function calling programs are provided.
Database Principle course; self-experimental platform; SQLite
10.16791/j.cnki.sjg.2016.11.039
2016-05-15
教育部高職高專教育規劃課題(JZW590112052);江蘇省教育科學“十二五”規劃課題(D/2015/03/085)
黎孟雄(1973—),男,湖南邵陽,碩士,副教授,主要研究方向為數據挖掘和教育信息化.
E-mail:jslyglmx@163.com
TP311.13;G642
A
1002-4956(2016)11-0157-04