劉蘭青 計三有
(1武漢理工大學物流工程學院,湖北武漢430070;2黃石理工學院教務處,湖北黃石435003)
隨著網(wǎng)絡技術、信息技術的不斷發(fā)展,高校教務管理系統(tǒng)在高校日常教務管理工作中的運用越來越普及,從單機管理模式到局域網(wǎng)的C/S模式,再從 C/S模式到廣域網(wǎng)的 B/S模式,直到發(fā)展到今天較為成熟的B/S與C/S相結(jié)合的混合模式。模式的變遷使得教務管理系統(tǒng)中的數(shù)據(jù)管理由以往的管理員單一管理發(fā)展到多角色多用戶的管理;由數(shù)據(jù)的單向流動發(fā)展到數(shù)據(jù)大流量交互式流動。使用數(shù)據(jù)庫的用戶或程序會對數(shù)據(jù)庫中的數(shù)據(jù)進行大量的操作,這些操作可能對數(shù)據(jù)的完整性造成在潛在威脅或破壞,比如在教師的成績錄入過程中對缺考學生的成績錄入處理是錄入0分還是“缺考”或“未考”,以往的很多做法是通過編寫詳細的用戶操作手冊規(guī)定教師錄入時的操作規(guī)范,但這樣的做法效果并不理想,通常在成績的錄入完成后進行成績處理和統(tǒng)計時,往往有許多不規(guī)范的數(shù)據(jù)進入數(shù)據(jù)庫。數(shù)據(jù)庫對于這些問題應是先行處理,而不是事后做出反應,即數(shù)據(jù)庫應通過數(shù)據(jù)完整性約束對用戶數(shù)據(jù)進行判斷,并拒絕不滿足條件的數(shù)據(jù)。本文對教務管理系統(tǒng)中的數(shù)據(jù)完整性約束設計做出相關的探討和實現(xiàn),有效維護了教務管理系統(tǒng)中數(shù)據(jù)的完整性和安全性,從而保證了教務管理系統(tǒng)有效、準確地運行。
數(shù)據(jù)完整性是指數(shù)據(jù)庫中數(shù)據(jù)的正確性、有效性和一致性。正確性是指數(shù)據(jù)的合法性;有效性是指數(shù)據(jù)是否在定義的有效范圍內(nèi);一致性指同一事實的2個數(shù)據(jù)應相同[1]。數(shù)據(jù)完整性包括:實體完整性、參照完整性、用戶自定義完整性[2]。實體完整性指組成主鍵的屬性上的值不能為空;參照完整性指一張表中的外鍵值要么為空,要么與另一張表中的主鍵值相同,其實質(zhì)就是不允許引用不存在的實體;用戶自定義完整性指用戶針對具體的數(shù)據(jù)要求,設置完整性規(guī)則。在SQL Server2005中為確保數(shù)據(jù)完整性首先采用約束,約束就是一種限制,并把這種限制放在列級別或者表級別,而數(shù)據(jù)類型和觸發(fā)器是保證數(shù)據(jù)完整性的其他手段[3]。
在SQL Server2005中實現(xiàn)約束的方式有很多種,但每一種都屬于域約束、實體約束或引用完整性約束這3類約束之一[3]。域約束涉及一個也可能是多個列,它確保某一列或一組列滿足特定的標準;實體約束是關于單獨行的,它是要求所有行的某個列或列的組合具有唯一值的約束;應用完整性約束是一列的值必須與另一張表的一個列中的值匹配。成績表如表1所示,若要限制成績列的值大于或等于0,可以用域約束。成績表中的主鍵由選課號和學號組成,可以用實體約束。成績表中的學號列中的值來源于學生信息表中的學號,課程號列中的值來源于課程信息表中的課程號,因此可以對學號和課程號列創(chuàng)建引用完整性約束。
表1 成績表
高校教務管理系統(tǒng)數(shù)據(jù)庫的設計要充分考慮到高校教務管理工作的業(yè)務流程、管理內(nèi)容和管理目標,從高校教務管理的數(shù)據(jù)流向出發(fā),根據(jù)各項數(shù)據(jù)自身的特點,以維護數(shù)據(jù)完整性為保證,使得教務管理的有效性、正確性、及時性得以體現(xiàn)來進行設計。
根據(jù)各高校教務管理工作的共同特點和筆者近幾年從事教務管理工作的經(jīng)驗,將高校教務管理系統(tǒng)數(shù)據(jù)庫數(shù)據(jù)完整性設計如下。
公共代碼表部分主要是涵蓋教務管理工作中全局性、統(tǒng)領性的工作數(shù)據(jù),包括校區(qū)代碼表、學院代碼表、專業(yè)代碼表。校區(qū)代碼表、學院代碼表、專業(yè)代碼表分別如表2、表3、表4所示。
表2 校區(qū)代碼表
表3 學院代碼表
表4 專業(yè)代碼表
以專業(yè)代碼表為例,專業(yè)代碼列為主鍵,主鍵即是每一行的唯一標識列,一個表最多只能有一個主鍵且主鍵不能為空。學院代碼列為外鍵,定義外鍵的專業(yè)代碼表稱為引用表,外鍵引用的表學院代碼表稱為被引用表,當向引用表中插入記錄時在被引用表中的被引用列上必須有與之匹配的記錄,因此外鍵屬于引用完整性約束。
基礎代碼表部分是涉及教務管理工作中基礎性、日常性的工作數(shù)據(jù),包括課程信息表、教室信息表、學生基本信息表、教師信息表等。學生基本信息表如表5所示。
表5 學生基本信息表
其中性別列采用Check約束,用以限制輸入到性別列中的數(shù)據(jù)為男或女,從而保證數(shù)據(jù)庫中數(shù)據(jù)的域完整性。身份證號列和考生號列采用Unique約束,以保證該2列的值均具有唯一性,防止在列中輸入重復值。Unique約束主要用于非主鍵值。
業(yè)務代碼表部分主要是在公共代碼表和基礎代碼表設計的基礎上針對教務管理工作的各項內(nèi)容進行抽象,并設計出數(shù)據(jù)庫表格以及相關操作,主要包括:培養(yǎng)計劃表、學期教學計劃任務表、學生選課表、學生成績表、學籍異動表、畢業(yè)生信息表和一些保證數(shù)據(jù)完整性的存儲過程和觸發(fā)器的設計。假設某專業(yè)的培養(yǎng)計劃進行了調(diào)整,這時除了應刪除培養(yǎng)計劃表中的原有課程和增加調(diào)整后的課程,還應考慮到原有課程可能已安排了學期教學任務,需要刪除該專業(yè)原有課程的學期計劃任務表中信息,觸發(fā)器的設計和使用對這樣類似的操作就能輕松實現(xiàn),很好的維護和保證數(shù)據(jù)的完整性。
下面以專業(yè)培養(yǎng)計劃調(diào)整為例簡述在SQL Server 2005環(huán)境下的數(shù)據(jù)完整性設計的實現(xiàn)。
培養(yǎng)計劃表的創(chuàng)建:
當培養(yǎng)計劃調(diào)整時,刪除培養(yǎng)計劃表中的某一門課程信息,若這門課程已做了任務落實,則需要同時刪除學期教學計劃任務表中的相關信息,這里可以通過設置級聯(lián)刪除觸發(fā)器來自動完成該操作。
級聯(lián)刪除觸發(fā)器代碼實現(xiàn)如下:
本文對教務管理系統(tǒng)中數(shù)據(jù)完整性約束進行了較為深入的探討和分析,根據(jù)教務管理工作的特點和規(guī)律對教務管理系統(tǒng)的數(shù)據(jù)庫和數(shù)據(jù)完整性進行了設計,并通過 SQL Server2005得以實現(xiàn)。掌握數(shù)據(jù)完整性對數(shù)據(jù)庫系統(tǒng)設計人員來講非常重要,它保證系統(tǒng)能夠正確、有效的運行,大大提高系統(tǒng)的可靠性。
[1] 陳長海.數(shù)據(jù)完整性概念及其基于SQL SERVER的實現(xiàn)[J].中國人民公安大學學報:自然科學版,2006,12(2):78-79
[2] 王能斌.數(shù)據(jù)庫系統(tǒng)原理[M].北京:電子工業(yè)出版社,2000
[3] Robert Vieira.SQL Server 2005高級程序設計[M].北京:人民郵電出版社,2008