- 相關(guān)推薦
基于Client/Server數據完整性約束的實(shí)現技術(shù)
基于Client/Server數據完整性約束的實(shí)現技術(shù) 中共廣州市委辦公廳自動(dòng)化中心 汪勝 廣東省財貿管理干部學(xué)院計算機系 彭湘凱 廣州工程總承包集團有限公司 時(shí)亞弘摘 要:本論文主要討論基于Client/Server數據完整性約束及其如何實(shí)施企業(yè)業(yè)務(wù)規則,并以SQLServer和PowerBuilder為例,介紹了數據完整性約束的實(shí)現技術(shù)。
關(guān)鍵詞:Client/Server,數據完整性約束, 企業(yè)業(yè)務(wù)規則
DBMS已從早期的分散的一個(gè)個(gè)計算模型、網(wǎng)絡(luò )/文件服務(wù)計算模型(針對文件)發(fā)展到現在的Client/Server計算模型(針對表中的一行)。Client/Server模型是非對等的(decoupled),客戶(hù)發(fā)出服務(wù)請求,服務(wù)器作出響應,提供服務(wù),即所謂的"請求驅動(dòng)"。DB的Client/Server系統由DBServer、客戶(hù)應用程序和網(wǎng)絡(luò )組成。DBServer(即后端)負責有效地管理系統的資源,主要負責數據處理、并發(fā)控制、數據安全性、數據完整性和數據的備份和恢復等?蛻(hù)應用程序(即前端)是系統中供用戶(hù)與數據進(jìn)行交互的部件,主要任務(wù)是提供交互式界面完成數據的錄入、分析、檢查和顯示,向DBServer發(fā)出請求(SQL語(yǔ)句)并接收結果和錯誤信息。網(wǎng)絡(luò )和通信軟件是系統中客戶(hù)和服務(wù)器之間數據傳送的工具。
由于現在的數據庫都是開(kāi)放、多用戶(hù)共享,因此維護數據庫的正確性至關(guān)重要。數據庫的完整性描述為數據庫內容的完整性約束集合,其中完整性約束指數據庫的一個(gè)狀態(tài)是否合理,這是一組謂詞。DBS檢查數據的狀態(tài)和狀態(tài)轉換,判定它們是否合理,是否應予接受。對一個(gè)數據庫操作,要判定其是否符合完整性約束,全部斷言無(wú)矛盾時(shí)才可以執行。完整性約束的形式化定義I=(O,P,A,R),其中O是完整性約束所涉及的數據對象集合,P是對象所滿(mǎn)足的謂詞,A是觸發(fā)檢查的條件,R是約束不滿(mǎn)足時(shí)的反應動(dòng)作[2]
一、 常見(jiàn)的數據完整性約束
根據分類(lèi)角度不同,可將完整性約束分為如下幾類(lèi):
·域、元組、集合完整性
·立即約束和推遲(到EOT)約束
·狀態(tài)約束和狀態(tài)演變約束。
·標準和定制的數據完整性約束
實(shí)際的系統中,一般將數據完整性約束分為標準的數據完整性約束和定制的數據完整性約束。標準的數據完整性約束是DBS已經(jīng)實(shí)現的內部規則,包括域完整性、實(shí)體完整性和引用完整性。
域完整性(Field Integrity)保證一個(gè)數據庫不包含無(wú)意義的或不合理的值,即保證表的某一列的任何值是該列域(即合法的數據集合)的成員。方法是限制列的數據類(lèi)型、精度、范圍、格式和長(cháng)度等。
實(shí)體完整性(Entity Integrity)保證一個(gè)表中的每一行必須是唯一的(元組的唯一性)。為保證實(shí)體完整性,需指定一個(gè)表中的一列或一組列作為它的主鍵(Primary Key)。一個(gè)表中每行的主鍵必須確實(shí)含有一個(gè)值。一個(gè)表只能含有一個(gè)主鍵,如需要從其它列中除去重復的值,可以將一個(gè)或一組非主鍵列指定為一個(gè)候選鍵或唯一值鍵。
引用完整性(Reference Integrity)定義了一個(gè)關(guān)系數據庫中不同的列和不同的表之間的關(guān)系(主鍵與外鍵)。要求一列或一組列中的值必須要與相關(guān)的一列或一組列中的值相匹配。從屬的一列或一組列稱(chēng)之為外鍵(Foreign Key)。被引用的列或一組列稱(chēng)之為父鍵,父鍵必須是一個(gè)主鍵或唯一鍵。外鍵屬于子表或明細表,父鍵屬于父表或主表。若父鍵和外鍵屬于同一表,則稱(chēng)之為自引用完整性。子表某行的外鍵必須與主表的主鍵相匹配,只要依賴(lài)于某主鍵的外鍵仍存在,主表中包含該主鍵的行就不能刪除。
由于每個(gè)公司的數據庫都有自己獨特的業(yè)務(wù)規則集,所以系統必須有一種方式來(lái)實(shí)現定制的業(yè)務(wù)規則即定制的數據完整性約束。定制的數據完整性約束可由如下幾種方法實(shí)施。
一種最原始的方法是將將每一個(gè)完整性約束編入要訪(fǎng)問(wèn)數據庫的每個(gè)應用程序中,缺點(diǎn)是在每個(gè)相關(guān)的數據庫應用程序中,開(kāi)發(fā)者都要對相同的完整性規則進(jìn)行編碼、測試和排錯。若某一規則變動(dòng),所有相關(guān)的應用程序都得改動(dòng)。應用程序須向DBServer請求大量的數據,以執行該應用程序內部的數據完整性規則檢查,這將阻塞網(wǎng)絡(luò )。因而這是一種耗時(shí)、低性能的方法。
用戶(hù)定義的數據類(lèi)型(User-defined DataType)是由標準數據類(lèi)型導出的新數據類(lèi)型,它比標準的數據類(lèi)型更準確地限定了數據輸入的范圍。
約束(Check)用于限制列的值域,在數據類(lèi)型限制的基礎上對輸入的數據進(jìn)一步進(jìn)行限制。通過(guò)邏輯表達式來(lái)定義列的有效值。
缺省(Default) 定義了一個(gè)數值,當用戶(hù)向數據表插入數據時(shí),若某個(gè)域未給定值,系統自動(dòng)將定義在該域上的缺省作為輸入值,保證數據庫數據的合理性。
規則(Rule) 是一個(gè)用來(lái)綁定域或用戶(hù)定義數據類(lèi)型的數據庫對象,規則說(shuō)明了哪些數據可以輸入到域中。任何時(shí)刻,用戶(hù)輸入或修改數據(INSERT 或 UPDATE), DBMS都將檢查該數據是否違反綁定在域上的規則。
存儲過(guò)程(Stored Procedure)是由編譯過(guò)的SQL語(yǔ)句、控制流語(yǔ)句、變量說(shuō)明和賦值運算等組成的集合,由開(kāi)發(fā)者創(chuàng )建并存儲在數據字典(大部分DBMS叫系統表)中。我們可以通過(guò)存儲過(guò)程中的語(yǔ)句來(lái)定義企業(yè)業(yè)務(wù)規則,特別對于復雜的表與表之間的餓關(guān)系,用存儲過(guò)程來(lái)實(shí)現將變得相當容易。
觸發(fā)器(Trigger)也是一個(gè)存儲過(guò)程,該過(guò)程在插入、修改和刪除等操作事前或事后由DBS自動(dòng)激發(fā)(執行)。經(jīng)常用于實(shí)現邏輯上相關(guān)的數據表之間的數據完整性和一致性。觸發(fā)器非常適合于實(shí)施企業(yè)規則,如果某個(gè)輸入違反了其中的某個(gè)企業(yè)規則,觸發(fā)器可以顯示相應錯誤并中止正在執行的數據庫動(dòng)作。
二、Client/Server模型下實(shí)施企業(yè)規則的準則
在Client/Server系統中,前端和后端都提供數據完整性約束。在前端可進(jìn)行域完整性約束,并能定制業(yè)務(wù)規則。在后端幾乎可以實(shí)現上述所列的所有的完整性約束。E.F.Codd在衡量關(guān)系數據庫的十二條準則之第十條指出關(guān)系完整性約束條件必須用數據子語(yǔ)言定義并存儲在數據字典中,而不是在應用程序中。這樣,當完整性約束改變時(shí),只要修改數據字典即可,完整性的改變一般不會(huì )在邏輯上影響應用程序的活動(dòng)。
前端應用程序也可以進(jìn)行某些完整性檢查并實(shí)施企業(yè)規則,但是這些做法不能用于取代在數據庫里的完整性約束定義。如果數據庫設計者完全正確地說(shuō)明了所有的約束和企業(yè)規則,則任何違反約束和規則的數據操作都會(huì )引起數據庫錯誤。前端應用程序的任務(wù)是盡量減少產(chǎn)生數據庫錯誤的可能性,只有從這個(gè)意義上說(shuō),前端應用程序才應當包含完整性檢查和實(shí)施
【基于Client/Server數據完整性約束的實(shí)現技術(shù)】相關(guān)文章:
實(shí)現基于網(wǎng)頁(yè)的數據庫數據導入03-18
SQL Server數據庫安全監控系統的設計與實(shí)現03-26
開(kāi)發(fā)基于SQL SERVER 的C/S數據庫應用系統?03-18
基于GPRS網(wǎng)絡(luò )的數據無(wú)線(xiàn)傳輸實(shí)現接口03-19
基于數據挖掘技術(shù)的交叉銷(xiāo)售分析12-08