



下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、基于ClientServer數據完整性約束實現技術 摘 要:本論文主要討論基于Client/Server數據完整性約束及其如何實施企業業務規則,并以SQLServer和PowerBuilder為例,介紹了數據完整性約束的實現技術。關鍵詞:Client/Server,數據完整性約束, 企業業務規則DBMS已從早期的分散的一個個計算模型、網絡/文件服務計算模型(針對文件)發展到現在的Client/Server計算模型(針對表中的一行)。Client/Server模型是非對等的(decoupled),客戶發出服務請求,服務器作出響應,提供服務,即所謂的&
2、quot;請求驅動"。DB的Client/Server系統由DBServer、客戶應用程序和網絡組成。DBServer(即后端)負責有效地管理系統的資源,主要負責數據處理、并發控制、數據安全性、數據完整性和數據的備份和恢復等。客戶應用程序(即前端)是系統中供用戶與數據進行交互的部件,主要任務是提供交互式界面完成數據的錄入、分析、檢查和顯示,向DBServer發出請求(SQL語句)并接收結果和錯誤信息。網絡和通信軟件是系統中客戶和服務器之間數據傳送的工具。 由于現在的數據庫都是開放、多用戶共享,因此維護數據庫的正確性至關重要。數據庫的完整性描述為數據庫內容的完整性約束集合,其中完整性約
3、束指數據庫的一個狀態是否合理,這是一組謂詞。DBS檢查數據的狀態和狀態轉換,判定它們是否合理,是否應予接受。對一個數據庫操作,要判定其是否符合完整性約束,全部斷言無矛盾時才可以執行。完整性約束的形式化定義I=(O,P,A,R),其中O是完整性約束所涉及的數據對象集合,P是對象所滿足的謂詞,A是觸發檢查的條件,R是約束不滿足時的反應動作2一、 常見的數據完整性約束 根據分類角度不同,可將完整性約束分為如下幾類: ·域、元組、集合完整性 ·立即約束和推遲(到EOT)約束 ·狀態約束和狀態演變約束。 ·標準和定制的數據完整性約束 實際的系統中,一般將數據完整性
4、約束分為標準的數據完整性約束和定制的數據完整性約束。標準的數據完整性約束是DBS已經實現的內部規則,包括域完整性、實體完整性和引用完整性。 域完整性(Field Integrity)保證一個數據庫不包含無意義的或不合理的值,即保證表的某一列的任何值是該列域(即合法的數據集合)的成員。方法是限制列的數據類型、精度、范圍、格式和長度等。 實體完整性(Entity Integrity)保證一個表中的每一行必須是唯一的(元組的唯一性)。為保證實體完整性,需指定一個表中的一列或一組列作為它的主鍵(Primary Key)。一個表中每行的主鍵必須確實含有一個值。一個表只能含有一個主鍵,如需要從其它列中除去
5、重復的值,可以將一個或一組非主鍵列指定為一個候選鍵或唯一值鍵。 引用完整性(Reference Integrity)定義了一個關系數據庫中不同的列和不同的表之間的關系(主鍵與外鍵)。要求一列或一組列中的值必須要與相關的一列或一組列中的值相匹配。從屬的一列或一組列稱之為外鍵(Foreign Key)。被引用的列或一組列稱之為父鍵,父鍵必須是一個主鍵或唯一鍵。外鍵屬于子表或明細表,父鍵屬于父表或主表。若父鍵和外鍵屬于同一表,則稱之為自引用完整性。子表某行的外鍵必須與主表的主鍵相匹配,只要依賴于某主鍵的外鍵仍存在,主表中包含該主鍵的行就不能刪除。 由于每個公司的數據庫都有自己獨特的業務規則集,所以系
6、統必須有一種方式來實現定制的業務規則即定制的數據完整性約束。定制的數據完整性約束可由如下幾種方法實施。 一種最原始的方法是將將每一個完整性約束編入要訪問數據庫的每個應用程序中,缺點是在每個相關的數據庫應用程序中,開發者都要對相同的完整性規則進行編碼、測試和排錯。若某一規則變動,所有相關的應用程序都得改動。應用程序須向DBServer請求大量的數據,以執行該應用程序內部的數據完整性規則檢查,這將阻塞網絡。因而這是一種耗時、低性能的方法。 用戶定義的數據類型(User-defined DataType)是由標準數據類型導出的新數據類型,它比標準的數據類型更準確地限定了數據輸入的范圍。 約束(Che
7、ck)用于限制列的值域,在數據類型限制的基礎上對輸入的數據進一步進行限制。通過邏輯表達式來定義列的有效值。 缺省(Default) 定義了一個數值,當用戶向數據表插入數據時,若某個域未給定值,系統自動將定義在該域上的缺省作為輸入值,保證數據庫數據的合理性。 規則(Rule) 是一個用來綁定域或用戶定義數據類型的數據庫對象,規則說明了哪些數據可以輸入到域中。任何時刻,用戶輸入或修改數據(INSERT 或 UPDATE), DBMS都將檢查該數據是否違反綁定在域上的規則。存儲過程(Stored Procedure)是由編譯過的SQL語句、控制流語句、變量說明和賦值運算等組成的集合,由開發者創建并存
8、儲在數據字典(大部分DBMS叫系統表)中。我們可以通過存儲過程中的語句來定義企業業務規則,特別對于復雜的表與表之間的餓關系,用存儲過程來實現將變得相當容易。 觸發器(Trigger)也是一個存儲過程,該過程在插入、修改和刪除等操作事前或事后由DBS自動激發(執行)。經常用于實現邏輯上相關的數據表之間的數據完整性和一致性。觸發器非常適合于實施企業規則,如果某個輸入違反了其中的某個企業規則,觸發器可以顯示相應錯誤并中止正在執行的數據庫動作。二、Client/Server模型下實施企業規則的準則 在Client/Server系統中,前端和后端都提供數據完整性約束。在前端可進行域完整性約束,并能定制業
9、務規則。在后端幾乎可以實現上述所列的所有的完整性約束。E.F.Codd在衡量關系數據庫的十二條準則之第十條指出關系完整性約束條件必須用數據子語言定義并存儲在數據字典中,而不是在應用程序中。這樣,當完整性約束改變時,只要修改數據字典即可,完整性的改變一般不會在邏輯上影響應用程序的活動。 前端應用程序也可以進行某些完整性檢查并實施企業規則,但是這些做法不能用于取代在數據庫里的完整性約束定義。如果數據庫設計者完全正確地說明了所有的約束和企業規則,則任何違反約束和規則的數據操作都會引起數據庫錯誤。前端應用程序的任務是盡量減少產生數據庫錯誤的可能性,只有從這個意義上說,前端應用程序才應當包含完整性檢查和
10、實施事務規則。當數據庫沒有完整性約束時,前端應用程序必須實施企業規則。 由此我們得出在實施企業規則時須遵循如下準則: ·集中在數據庫中實施企業規則 ·減少對數據庫請求的次數,盡量減少返回結果 我們在實施企業規則時,應將所有的企業規則定義在數據字典中,應用程序在向數據庫提交SQL語句之前盡量減少由用戶引起數據庫錯誤的可能性,使應用程序運行順暢,對用戶友好,開銷少。三、PowerBuilder/SQLServer數據完整性約束的實現技術 PowerBuilder是當今非常流行的前端開發工具,它提供了豐富的構件,能很方便地開發出界面友好、功能強大的應用程序。下面以功能強大的數據窗
11、口為例,說明前端開發工具如何實現數據完整性約束,PowerBuilder的其它構件也提供類似實現完整性約束的方法。 利用列的編輯風格(Edit Style)限制列的長度、格式、值域等。PowerBuilder提供無線按鈕(Radio Button)、檢查框(Check Box)、下拉式數據窗口(DropDown DataWindow)、下拉式列表框(DropDown List)、編輯屏蔽(Edit Mask)和編輯(Edit)等編輯風格來檢查列的數據類型。 利用列的有效性驗證規則(Validation Rule)對輸入數據進行限制。在Validation Rule對話框內,可輸入規則定義(Ru
12、le Definition)和有效性規則出錯信息(Validation Error Message)。 可在ItemChanged事件的Script程序里對輸入數據進行進一步的有效性驗證,若輸入數據不能通過在ItemChanged事件里所設置的檢查,則返回動作碼1,拒絕輸入數據。 當應用程序調用函數Update()更新數據庫之前,觸發UpdateStart事件。該事件是用于進行數據有效性驗證的最后一次機會。若輸入數據的有效性驗證失敗,則返回動作碼1,拒絕數據更新。 針對那些數據庫要求必須具備值的列(即那些具有NOT NULL約束的列),可將對應的數據窗口的列置為必備域(Required Fie
13、ld)。但是必備域的約束對用戶來說并不友好,用戶必須輸入一個值,否則無法離開該列。一種替代的辦法是在UpdateStart事件里檢查列(在數據庫中為NOT NULL列)的值是否為NULL。 利用自定義有效性驗證函數進行常規的數據檢查,有助于應用程序的標準化和簡化。這些函數可以用在列的有效性驗證規則,也可以用在Itemchanged事件的Script程序中。一般自定義有效性驗證函數被設計成全局函數、返回布爾型結果。 在數據窗口的字段中輸入數據,離開該字段,系統調用AcceptText()函數 用戶調用A
14、cceptText()函數 執行字段的數據類型檢查 合法 使用字段的有效性驗證規則 激發ItemError事件 合法 執行ItemChanged事件(可設置有效性驗證) 0
15、160; 數據窗口接受該值 用戶調用Update()函數 執行UpdateStart事件 不更新數據庫 0 更新數據庫 圖一、PowerBuilder數據有效性驗證的過程 值得注意的是有效性驗證規則對數
16、據窗口類的所有實例都通用,而在Itemchanged事件的Script程序里進行有效性驗證與具體的數據窗口密切相關。有些有效性驗證需進行數據庫查詢,若需要很高的系統代價,盡量避免使用。 SQLServer是一個多用戶的RDBMS,它為復雜環境下有效地實現企業管理提供了一個強有力的Client/Server平臺,是一種較理想的后端數據庫服務器之一。微軟和SYBASE公司都支持SQLServer產品。下面只以一個例子來說明在SQLServer中如何實現數據的域、實體、引用完整性約束。有關于如何用存儲過程、觸發器、規則和用戶定義數據類型等實現數據完整性約束可參見有關資料。 CREATE TABLE
17、pageruser( stationid SMALLINT NOT NULL,userid INT NOT NULL ,frequentid SMALLINT NOT NULL,machinecode INT NOT NULL,name CHAR(10),sex CHAR(1),pagertypeid SMALLINT NOT NULL,PRIMARY KEY(stationid,userid),UNIQUE(frequentid,machinecode),FOREIGN KEY(pagertypeid) REFERENCES pagertype,CHECK(sex in('F','M')CREATE TABLE pagertype( id SMALLINT,typename CHAR(10),note CHAR(30),PRIMARY KEY(id)以上定義了一個尋呼臺D
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 16262.2-2025信息技術抽象語法記法一(ASN.1)第2部分:信息客體規范
- 筆記重點2025年證券從業資格證考試試題及答案
- 長期投入的證券從業資格證試題及答案
- 項目團隊績效管理的考試題型分析試題及答案
- 探索注冊會計師考試的行業背景與變化趨勢試題及答案
- 2025年證券從業資格理解與運用試題及答案
- 財務報告審核技巧試題及答案2025
- 注冊會計師考試學術研究對提高專業素養的貢獻探討試題及答案
- 項目目標與設計思路的有效結合試題及答案
- 員工心理健康與支持措施計劃
- 義務教育勞動教育課程標準(2022版)考試題庫(含答案)
- 壓力容器設計質量手冊+記錄表卡
- JGJ3-2010 高層建筑混凝土結構技術規程
- JT-T-1184-2018城市公共汽電車企業運營成本測算規范
- 18籃球的體前變向換手運球
- JBT 14585-2024 信號蝶閥(正式版)
- JGJ107-2016鋼筋機械連接技術規程
- (高清版)WST 402-2024 臨床實驗室定量檢驗項目參考區間的制定
- 圍墻拆除工程施工方案
- 性發育異常疾病課件
- 清水河儲能電站施工方案設計
評論
0/150
提交評論