蘇昭虎
技術考試系統的需求分析
對技校現行課程考試業(yè)務進行詳細了解,通過認真調查后得知,原有的人工操作在考試工作中占的比重較大,考試流程是這樣的:教導處下發(fā)考試通知→老師出卷→安排考場→組織考前宣傳以及公布考場地點→印刷試卷→正式考試→閱卷→出成績→張榜公布成績等。根據調查結果,得到考試工作的組織機構設置如圖所示。
通過了解詳細情況之后并結合現行考試模式,而確定本系統的業(yè)務流程如圖1-2所示。
技??荚囅到y的功能結構設計
系統功能結構。根據需求分析可知,技校學生考試系統是由三大模塊組成:后臺管理模塊、考試功能模塊以及領導審核功能模塊,如圖2-1示。
數據庫設計。在Oracle數據庫服務器上建立名為exam的數據庫。該考試系統包括的數據表有:考生信息表(XS),成績表(CJ),學生檔案表(DA),題庫表(TK),班級表(BJ)等表,因編幅有限而略去。
Oracle數據庫優(yōu)化技術在考試系統中的應用
SQL語句的優(yōu)化是作為Oracle數據庫系統中最為重要的一個組成部分。隨著考試系統數據庫的日漸增大,系統最為突出的問題就是數據訪問的響應速度。因此,這里對考試系統中的Oracle數據庫查詢技術進行優(yōu)化是十分有必要的。
從上面的Oracle中的SQL語句我們能夠發(fā)現學生考試記錄查詢語句中對SQL語法使用存在錯誤,而最終使得某些字段索引出現失效的現象,即and to_char(c.dt,'yyyy-mm')=to_char(sysdate,'yyyy-mm')這一句,因為索引列在函數中,那么索引將會失去原有的作用,這樣的一種SQL語句錯誤的做法,使得在考試系統數據庫建立時就被忽略掉了,其實這樣的忽略會使訪問速率造成較大的影響,那么我們可以改成這樣:andc.dt=trunc(sysdat e.'yyyy-mm')and c.dt<=last_day(sysdate)。另一個語句a and b.id(題號)In(Select id From TK t With t.id=b.id Connect By t.id=Prior sj_b.id)中的in能夠用exists來取代替,這樣能夠在很大程度上提高考生信息記錄查詢的速率,優(yōu)化后完整的SQL語句是這樣的:
考生成績信息查詢優(yōu)化
select*from CJ a,DA b where a.id=b.sno order by sno,km
該語句主要是實現了考生各個科目成績的查詢和排序,由于技??忌藬递^多,且每個考生又對應著多個考試科目。雖然SQL語句很簡單,但是查詢速度卻是十分的慢。主要原因是由于這個語句中,有兩個關聯表中的兩個字段都沒有建立索引,從而使得查詢速度十分的慢,如果對這些字段全面建立起索引,那么就能夠全面有效地提高這個語句的查詢速率。具體做法是:成績表(cj)的科目字段km索引名為km_idx,檔案表(DA)的學號sno的索引名為sno_idx。所以需要在Oracle數據庫中創(chuàng)建兩條索引來進行優(yōu)化,下面通過兩條語句來建立數據表的相應索引:CREATE INDEX km_idx ON Exam.CJ(km)
CREATE INDEX sno_idx ON Exam.DA(sno)
優(yōu)化效果。通過對考生考試信息查詢和考生成績信息查詢頁面SQL語句的優(yōu)化,以此來提高查詢速度,下表3-1是優(yōu)化前和優(yōu)化后所用的時間:
表3-1 SQL優(yōu)化前后的性能測試結果從圖3-1中我們能夠看出,學生考試系統的考試信息查詢SQL語句優(yōu)化理論對以上SQL語句進行了優(yōu)化調整,SQL語句的查詢速度得到了很大的提升??忌荚囆畔⒉樵兊乃俣绕骄岣吡?8.47%,考生成績信息查詢的速度平均提高了67.03%,從圖中我們可以看出優(yōu)化以后的查詢速率確實有了明顯的改善,且優(yōu)化效果很好。