王 翔
(中國民用航空飛行學(xué)院,四川 廣漢 618307)
隨著中國民航事業(yè)的不斷發(fā)展, 對于專業(yè)技術(shù)性人才的需求正不斷的上升[1],實訓(xùn)基地教研室承擔(dān)著培養(yǎng)機務(wù)維修人員的教學(xué)任務(wù)。 然而在實際運行中發(fā)現(xiàn),該教研室需要對不同模塊、不同學(xué)員、不同階段的課時進行統(tǒng)計, 統(tǒng)計過程數(shù)據(jù)繁雜, 為工作人員增加了大量的重復(fù)性工作。 為了配合教研室運行電子化的要求,設(shè)計了課時管理系統(tǒng)。 在實際使用時發(fā)現(xiàn),系統(tǒng)在查詢課時信息時存在查詢時間長, 系統(tǒng)響應(yīng)慢等缺點。 因此,提升系統(tǒng)查詢效率成為目前亟需解決問題。本文在介紹了系統(tǒng)設(shè)計構(gòu)架的基礎(chǔ)之上, 重點從訪問模式優(yōu)化、 數(shù)據(jù)庫設(shè)計優(yōu)化和程序優(yōu)化三個方面闡述了系統(tǒng)優(yōu)化方法。 在實踐表明, 科室管理系統(tǒng)較之前在查詢效率上得到明顯提高。
課時管理系統(tǒng)的主要目的是為了方便教師或者管理人員能夠快速、 準確的查詢個人或者他人的課時數(shù)據(jù)。 軟件開發(fā)需要使用的系統(tǒng)環(huán)境和開發(fā)語言等因素直接影響到軟件開發(fā)的可用性、適用性和時效性[2]。 因此合理選擇軟件開發(fā)的資源是可以提高系統(tǒng)開發(fā)的效率,達到事半功倍的效果。
Windows 系統(tǒng)作為常用系統(tǒng)廣泛運用于各教研室的系統(tǒng)辦公當(dāng)中, 為軟件的適用性打下基礎(chǔ)。 Visual Studio 因其完善的開發(fā)界面、 完全支持拖動方式設(shè)計窗體布局、 自動生成各種窗體設(shè)計代碼等優(yōu)點得到廣大開發(fā)者的認同[3]。 C# 是Microsoft 重點推出的開發(fā)語言,其結(jié)合了C 和C++的部分優(yōu)點,去除指針等難于理解的概念,是一門易于學(xué)習(xí)和開發(fā)的語言。MySQL 數(shù)據(jù)庫在安裝、 配置和后期維護等過程相對于其他數(shù)據(jù)庫來說更加簡單[4],并且MySQL 開發(fā)源代碼,無授權(quán)費,因此MySQL 受到開發(fā)者的廣泛青睞。
根據(jù)目前現(xiàn)有的資源, 課時管理系統(tǒng)以成熟的Windows 作為開發(fā)用操作系統(tǒng), 采用Visual Studio2017開發(fā)工具,以C# 語言作為軟件開發(fā)語言,結(jié)合MySQL數(shù)據(jù)庫系統(tǒng)發(fā)開而成。
圖1 系統(tǒng)架構(gòu)
系統(tǒng)程序架構(gòu)主要由三部分構(gòu)成, 分別是界面設(shè)計、應(yīng)用設(shè)計和數(shù)據(jù)庫設(shè)計,如圖1 所示。 界面設(shè)計主要面對用戶, 以界面簡潔為基礎(chǔ), 容易操作為主要設(shè)計目標, 達到界面的人機友好的目的。 應(yīng)用程序設(shè)計包含著課時管理系統(tǒng)的核心功能, 包括各類信息的錄入、查詢功能,信息的篩選計算功能等。 應(yīng)用程序需要通過調(diào)用數(shù)據(jù)庫來實現(xiàn)數(shù)據(jù)的計算和存儲。
圖2 系統(tǒng)界面截圖
依據(jù)課時管理系統(tǒng)的七個功能, 以標簽頁的形式將系統(tǒng)軟件設(shè)計設(shè)計成七個分頁。 分別是: 人員信息頁、班級信息頁、課程信息頁、課時查詢頁、課時費查詢頁、 課時打印頁和反饋日志頁。 課程信息頁截圖如圖2 所示。
數(shù)據(jù)庫設(shè)計主要是通過理解、 歸納和總結(jié)課時系統(tǒng)的需求, 設(shè)計不同的表來記錄系統(tǒng)的各類信息數(shù)據(jù)。 表是數(shù)據(jù)庫最基本的組成對象,是數(shù)據(jù)庫的實體。表與表之間的關(guān)系可以通過E-R 模型展示,方便在設(shè)計過程中對出現(xiàn)的問題快速找到解決方案, 同時也便于日后數(shù)據(jù)庫的維護。 課時管理系統(tǒng)的E-R 模型如圖3 所示。
圖3 課時管理系統(tǒng)E-R 圖
系統(tǒng)在查詢數(shù)據(jù)庫時, 應(yīng)根據(jù)不同的情況采取不同的訪問模式。 每一次應(yīng)用程序在需要查詢數(shù)據(jù)庫數(shù)據(jù)時, 都需要打開一次查詢函數(shù), 在使用完畢后需要釋放該函數(shù)以達到節(jié)約系統(tǒng)資源, 保證系統(tǒng)穩(wěn)定運行。 因此每次查詢的開銷都有固定最小值。 根據(jù)實際查詢需求, 單次查詢和批量數(shù)據(jù)查詢需要使用不同的查詢方法來達到優(yōu)化查詢的目的。
對于單次查詢數(shù)據(jù)的讀取和寫入, ExecuteQuery(string sqlStr) 函數(shù)的功能是根據(jù)輸入的sqlStr 語句,讀取查詢得到的數(shù)據(jù)結(jié)果,并將結(jié)果以DataTable 的形式返回。 ExecuteUpdate(string sqlStr)函數(shù)的功能是根據(jù)輸入的sqlStr 語句,對相應(yīng)的數(shù)據(jù)進行添加、刪除或者修改等功能,并將成功操作的次數(shù)以int 的形式返回。
對于多次查詢數(shù)據(jù)的讀取和寫入, 如果依舊使用以上函數(shù)進行操作, 雖然功能上可以實現(xiàn), 但多次打開和關(guān)閉數(shù)據(jù)庫連接操作, 使得查詢花銷大大增加。因 此 需 要 重 新 構(gòu) 建 新 的 查 詢 函 數(shù) 。 DataSet ExecuteQuery DataSet(string sqlStr, string tablename) 函數(shù)的功能是根據(jù)輸入的sqlStr 語句, 讀取查詢得到的數(shù)據(jù)結(jié)果,并將結(jié)果以DataTable 的形式返回至DataSet 下名 稱 為tablename 的DataTable 中。 ExecuteUpdateDataTable(string sqlStr, string tablename, DataSet ds) 函數(shù)是將DataSet 下名稱為tablename 的DataTable 中的數(shù)據(jù)按照sqlStr 語句一次性寫入到數(shù)據(jù)庫中。 ExecuteDataTable(string sqlStr, DataTable dt) 函數(shù)是將DataTable 中的數(shù)據(jù)按照sqlStr 語句一次性寫入到數(shù)據(jù)庫中。
合理、優(yōu)秀的數(shù)據(jù)庫基表設(shè)計,直接影響到數(shù)據(jù)查詢的速度。 根據(jù)課時管理系統(tǒng)的主要功能, 將數(shù)據(jù)庫劃分為人員、班級、日期、課程、課程調(diào)整、補考、課程安排七個組件。 針對各自組件的業(yè)務(wù)處理需要設(shè)計獨立的數(shù)據(jù)庫基表, 最大限度減少不同表之間的關(guān)聯(lián)度,加快查詢的速度。
遵循數(shù)據(jù)庫第三范式設(shè)計原則, 每個表中非關(guān)鍵字都直接關(guān)聯(lián)關(guān)鍵字, 并將關(guān)鍵字設(shè)為唯一主鍵。 然而在實際運行時, 為了提高查詢效率, 需降低范式標準,適當(dāng)保留若干冗余數(shù)據(jù),實現(xiàn)方法為增加字段,以空間換時間的方式實現(xiàn)查詢的高效性[5]。
在應(yīng)用程序中需要查詢數(shù)據(jù)時, 應(yīng)合理使用SQL操作符, 在保證檢索的準確度的同時減少系統(tǒng)響應(yīng)的時間。 減少使用select * 的方式提取表中全部信息,應(yīng)根據(jù)實際計算需要, 將有效的字段列舉, 提高查詢效率。 根據(jù)數(shù)據(jù)的特點,適當(dāng)使用如distinct、where、like 等操作符,結(jié)果以order by 升序或降序排列,使得查詢結(jié)果符合查詢預(yù)期, 檢索出所需的數(shù)據(jù)信息。 如果查詢時需要結(jié)合多個表聯(lián)合查詢, 可使用join 操作來實現(xiàn)多表的一次查詢。 Where 操作符在使用時不要在子句中加入函數(shù)計算, 數(shù)值運算功能應(yīng)在應(yīng)用程序中單獨設(shè)立模塊,避免查詢數(shù)據(jù)時間過長。
課時管理系統(tǒng)在設(shè)計時, 必須充分考慮教研室教師的查詢需求。 在符合需求的基礎(chǔ)之上, 優(yōu)化查詢效率是進一步提高用戶的使用體驗的主要手段。 本文結(jié)合訪問模式、 數(shù)據(jù)庫設(shè)計和應(yīng)用程序優(yōu)化三個方面,優(yōu)化數(shù)據(jù)庫查詢效率。 目前該系統(tǒng)尚處在試用階段,根據(jù)使用者的體驗反饋, 進一步完善系統(tǒng)在查詢課時業(yè)務(wù)的體驗。