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