日本在线www-日本在线播放一区-日本在线不卡免费视频一区-日本在线不卡视频-成人影院久久久久久影院-成人影院一区二区三区

最新廣告
關注中國自動化產業發展的先行者!
工業智能邊緣計算2025年會
CAIAC 2025
2025工業安全大會
OICT公益講堂
當前位置:首頁 >> 案例 >> 案例首頁

案例頻道

淺談Client/Server數據的完整性約束
  • 企業:控制網    
  • 點擊數:1700     發布時間:2006-09-07 20:46:56
  • 分享到:
主要討論基于Client/Server數據完整性約束及其如何實施企業業務規則,并以SQLServer和PowerBuilder為例,介紹了數據完整性約束的實現技術。
       DBMS已從早期的分散的一個個計算模型、網絡/文件服務計算模型(針對文件)發展到現在的Client/Server計算模型(針對表中的一行)。Client/Server模型是非對等的(decoupled),客戶發出服務請求,服務器作出響應,提供服務,即所謂的"請求驅動"。DB的Client/Server系統由DBServer、客戶應用程序和網絡組成。DBServer(即后端)負責有效地管理系統的資源,主要負責數據處理、并發控制、數據安全性、數據完整性和數據的備份和恢復等。客戶應用程序(即前端)是系統中供用戶與數據進行交互的部件,主要任務是提供交互式界面完成數據的錄入、分析、檢查和顯示,向DBServer發出請求(SQL語句)并接收結果和錯誤信息。網絡和通信軟件是系統中客戶和服務器之間數據傳送的工具。
        由于現在的數據庫都是開放、多用戶共享,因此維護數據庫的正確性至關重要。數據庫的完整性描述為數據庫內容的完整性約束集合,其中完整性約束指數據庫的一個狀態是否合理。DBS檢查數據的狀態和狀態轉換,判定它們是否合理,是否應予接受。對一個數據庫操作,要判定其是否符合完整性約束,全部斷言無矛盾時才可以執行。完整性約束的形式化定義I=(O,P,A,R),其中O是完整性約束所涉及的數據對象集合,P是對象所滿足的謂詞,A是觸發檢查的條件,R是約束不滿足時的反應動作。
一、 常見的數據完整性約束
根據分類角度不同,可將完整性約束分為如下幾類:
?域、元組、集合完整性
?立即約束和推遲(到EOT)約束
?狀態約束和狀態演變約束。
?標準和定制的數據完整性約束
  實際的系統中,一般將數據完整性約束分為標準的數據完整性約束和定制的數據完整性約束。標準的數據完整性約束是DBS已經實現的內部規則,包括域完整性、實體完整性和引用完整性。
域完整性(Field Integrity)保證一個數據庫不包含無意義的或不合理的值,即保證表的某一列的任何值是該列域(即合法的數據集合)的成員。方法是限制列的數據類型、精度、范圍、格式和長度等。
       實體完整性(Entity Integrity)保證一個表中的每一行必須是唯一的(元組的唯一性)。為保證實體完整性,需指定一個表中的一列或一組列作為它的主鍵(Primary Key)。一個表中每行的主鍵必須確實含有一個值。一個表只能含有一個主鍵,如需要從其它列中除去重復的值,可以將一個或一組非主鍵列指定為一個候選鍵或唯一值鍵。
       引用完整性(Reference Integrity)定義了一個關系數據庫中不同的列和不同的表之間的關系(主鍵與外鍵)。要求一列或一組列中的值必須要與相關的一列或一組列中的值相匹配。從屬的一列或一組列稱之為外鍵(Foreign Key)。被引用的列或一組列稱之為父鍵,父鍵必須是一個主鍵或唯一鍵。外鍵屬于子表或明細表,父鍵屬于父表或主表。若父鍵和外鍵屬于同一表,則稱之為自引用完整性。子表某行的外鍵必須與主表的主鍵相匹配,只要依賴于某主鍵的外鍵仍存在,主表中包含該主鍵的行就不能刪除。
  由于每個公司的數據庫都有自己獨特的業務規則集,所以系統必須有一種方式來實現定制的業務規則即定制的數據完整性約束。定制的數據完整性約束可由如下幾種方法實施。
一種最原始的方法是將將每一個完整性約束編入要訪問數據庫的每個應用程序中,缺點是在每個相關的數據庫應用程序中,開發者都要對相同的完整性規則進行編碼、測試和排錯。若某一規則變動,所有相關的應用程序都得改動。應用程序須向DBServer請求大量的數據,以執行該應用程序內部的數據完整性規則檢查,這將阻塞網絡。因而這是一種耗時、低性能的方法。
用戶定義的數據類型(User-defined DataType)是由標準數據類型導出的新數據類型,它比標準的數據類型更準確地限定了數據輸入的范圍。
約束(Check)用于限制列的值域,在數據類型限制的基礎上對輸入的數據進一步進行限制。通過邏輯表達式來定義列的有效值。
        缺省(Default) 定義了一個數值,當用戶向數據表插入數據時,若某個域未給定值,系統自動將定義在該域上的缺省作為輸入值,保證數據庫數據的合理性。
規則(Rule) 是一個用來綁定域或用戶定義數據類型的數據庫對象,規則說明了哪些數據可以輸入到域中。任何時刻,用戶輸入或修改數據(INSERT 或 UPDATE), DBMS都將檢查該數據是否違反綁定在域上的規則。
        存儲過程(Stored Procedure)是由編譯過的SQL語句、控制流語句、變量說明和賦值運算等組成的集合,由開發者創建并存儲在數據字典(大部分DBMS叫系統表)中。我們可以通過存儲過程中的語句來定義企業業務規則,特別對于復雜的表與表之間的關系,用存儲過程來實現將變得相當容易。
        觸發器(Trigger)也是一個存儲過程,該過程在插入、修改和刪除等操作事前或事后由DBS自動激發(執行)。經常用于實現邏輯上相關的數據表之間的數據完整性和一致性。觸發器非常適合于實施企業規則,如果某個輸入違反了其中的某個企業規則,觸發器可以顯示相應錯誤并中止正在執行的數據庫動作。
二、Client/Server模型下實施企業規則的準則
  在Client/Server系統中,前端和后端都提供數據完整性約束。在前端可進行域完整性約束,并能定制業務規則。在后端幾乎可以實現上述所列的所有的完整性約束。E.F.Codd在衡量關系數據庫的十二條準則之第十條指出關系完整性約束條件必須用數據子語言定義并存儲在數據字典中,而不是在應用程序中。這樣,當完整性約束改變時,只要修改數據字典即可,完整性的改變一般不會在邏輯上影響應用程序的活動。
        前端應用程序也可以進行某些完整性檢查并實施企業規則,但是這些做法不能用于取代在數據庫里的完整性約束定義。如果數據庫設計者完全正確地說明了所有的約束和企業規則,則任何違反約束和規則的數據操作都會引起數據庫錯誤。前端應用程序的任務是盡量減少產生數據庫錯誤的可能性,只有從這個意義上說,前端應用程序才應當包含完整性檢查和實施事務規則。當數據庫沒有完整性約束時,前端應用程序必須實施企業規則。
由此我們得出在實施企業規則時須遵循如下準則:
?集中在數據庫中實施企業規則
?減少對數據庫請求的次數,盡量減少返回結果
我們在實施企業規則時,應將所有的企業規則定義在數據字典中,應用程序在向數據庫提交SQL語句之前盡量減少由用戶引起數據庫錯誤的可能性,使應用程序運行順暢,對用戶友好,開銷少。
三、PowerBuilder/SQLServer數據完整性約束的實現技術
        PowerBuilder是當今非常流行的前端開發工具,它提供了豐富的構件,能很方便地開發出界面友好、功能強大的應用程序。下面以功能強大的數據窗口為例,說明前端開發工具如何實現數據完整性約束,PowerBuilder的其它構件也提供類似實現完整性約束的方法。
◆利用列的編輯風格(Edit Style)限制列的長度、格式、值域等。PowerBuilder提供無線按鈕(Radio Button)、檢查框(Check Box)、下拉式數據窗口(DropDown DataWindow)、下拉式列表框(DropDown List)、編輯屏蔽(Edit Mask)和編輯(Edit)等編輯風格來檢查列的數據類型。
◆利用列的有效性驗證規則(Validation Rule)對輸入數據進行限制。在Validation Rule對話框內,可輸入規則定義(Rule Definition)和有效性規則出錯信息(Validation Error Message)。
◆可在ItemChanged事件的Script程序里對輸入數據進行進一步的有效性驗證,若輸入數據不能通過在ItemChanged事件里所設置的檢查,則返回動作碼1,拒絕輸入數據。
◆當應用程序調用函數Update()更新數據庫之前,觸發UpdateStart事件。該事件是用于進行數據有效性驗證的最后一次機會。若輸入數據的有效性驗證失敗,則返回動作碼1,拒絕數據更新。
◆針對那些數據庫要求必須具備值的列(即那些具有NOT NULL約束的列),可將對應的數據窗口的列置為必備域(Required Field)。但是必備域的約束對用戶來說并不友好,用戶必須輸入一個值,否則無法離開該列。一種替代的辦法是在UpdateStart事件里檢查列(在數據庫中為NOT NULL列)的值是否為NULL。
◆利用自定義有效性驗證函數進行常規的數據檢查,有助于應用程序的標準化和簡化。這些函數可以用在列的有效性驗證規則,也可以用在Itemchanged事件的Script程序中。一般自定義有效性驗證函數被設計成全局函數、返回布爾型結果。

 

圖一、PowerBuilder數據有效性驗證的過程

        值得注意的是有效性驗證規則對數據窗口類的所有實例都通用,而在Itemchanged事件的Script程序里進行有效性驗證與具體的數據窗口密切相關。有些有效性驗證需進行數據庫查詢,若需要很高的系統代價,盡量避免使用。
SQLServer是一個多用戶的RDBMS,它為復雜環境下有效地實現企業管理提供了一個強有力的Client/Server平臺,是一種較理想的后端數據庫服務器之一。微軟和SYBASE公司都支持SQLServer產品。下面只以一個例子來說明在SQLServer中如何實現數據的域、實體、引用完整性約束。有關于如何用存儲過程、觸發器、規則和用戶定義數據類型等實現數據完整性約束可參見有關資料。
 
CREATE TABLE t_user
( stationid SMALLINT NOT NULL,
userid INT NOT NULL ,
mateid SMALLINT NOT NULL,
name CHAR(10),
sex CHAR(1),
birthdate date(8),
PRIMARY KEY(stationid,userid),
UNIQUE(userid,mateid),
FOREIGN KEY(t_unitid) REFERENCES t_unit,
CHECK(sex in('F','M'))
)
CREATE TABLE t_unit
( id SMALLINT NOT NULL,
unitname CHAR(10),
unitaddress CHAR(30),
Unitphone CHAR(12),
PRIMARY KEY(id)
)
       以上定義了一個管理系統DB的用戶檔案表t_user和單位表t_unit,我們可以看出如何定義域完整性、主鍵、外鍵、唯一鍵、NOT NULL和CHECK約束。
四、結束語
本文討論了分布計算環境下的數據完整性約束的概念及其實現技術。另外,基于Browser/Server計算模式下的應用系統同樣需要考慮數據完整性約束的問題,且其與基于Client/Server的數據完整性約束相類似。
參考文獻:
[1] 李昭原主編 數據庫技術新發展 清華大學出版社,1997
[2] 周龍鑲編著 數據庫管理系統實現技術 中國地質大學出版社,1990
 

熱點新聞

推薦產品

x
  • 在線反饋
1.我有以下需求:



2.詳細的需求:
姓名:
單位:
電話:
郵件:
主站蜘蛛池模板: 国产精品高潮呻吟AV久久-国产精品高潮呻吟AV久久床戏-国产精品高潮呻吟AV久久动漫-国产精品高潮呻吟AV久久黄-国产精品高潮呻吟AV久久无码-国产精品高潮呻吟爱久久AV无码 | 丝袜情趣在线资源二区-丝袜啪啪-丝袜秘书ol连裤袜在线播放-丝袜美女被出水一区-国产国产人在线成免费视频69-国产国产人免费视频成69堂 | www日本xxxx-www日-www欧美在线观看-www欧美视频-www欧美-www毛片com | 一区二区三区欧美日韩-一区二区三区欧美-一区二区三区免费在线视频-一区二区三区免费在线观看-久久精品店-久久精品第一页 | 亚洲视频一区二区,国产一区二区网站,国产精品…在线观看,欧美高清正版在线,欧美日韩 国产区 在线观看,亚洲最新视频在线观看 | 美女内射毛片在线看-美女内射毛片在线看免费人动物-美女内射视频WWW网站午夜-美女强奷到抽搐在线播放-美女视频黄a视频全免费网站色窝-美女视频黄的全是免费 | 国产首页-国产手机精品自拍视频-国产视频综合-国产视频自拍一区-香蕉网在线播放-香蕉网在线 | 欧洲免费极品videos-欧洲美女高清一级毛片-欧洲精品欧美精品-欧洲精品不卡1卡2卡三卡四卡-中午字幕在线观看-中文字日产幕码三区的做法大全 | 日韩在线观看网站-日韩在线观看视频网站-日韩在线观看视频免费-日韩在线观看视频黄-日韩在线观看免费完整版视频-日韩在线观看免费 | 手机看片福利永久国产日韩-手机看片369-手机精品在线-手机国产乱子伦精品视频-国产精品嫩草影院在线观看免费-国产精品嫩草影院在线播放 | 五月天婷婷激情,99久久精品久久久久久清纯,免费亚洲网站,久久精品亚洲乱码伦伦中文,精品久久久久久国产牛牛app,97不用下载 | 日皮影院,一区二区三区高清不卡,国产日韩欧美中文字幕,日韩亚洲欧美一区二区三区,国产三级91,国产精品hd免费观看 | 麻豆系列国产剧在线观看-麻豆系列 在线视频-麻豆午夜视频-麻豆污视频-麻豆网站在线免费观看-麻豆网站在线看 | 99热最新在线观看-99人中文字幕亚洲区-99日韩-99日韩精品-99色99-99色吧 | 甜性涩爱在线播放-甜性涩爱下载-甜性涩爱全集在线观看-甜性涩爱免费下载-国产成人午夜精品免费视频-国产成人无码一区AV在线观看 极品少妇粉嫩小泬啪啪AV-极品少妇粉嫩小泬啪啪小说-极品少妇高潮啪啪AV无码-极品少妇伦理一区二区-极品少妇小泬50PTHEPON-极品夜夜嗨久久精品17c | 久久免费视频1-久久免费看视频-久久免费精品一区二区-久久免费精品视频-中文字幕亚洲专区-中文字幕亚洲一区二区三区 | 麻豆黑色丝袜jk制服福利网站-麻豆精品传媒视频观看-麻豆精品传媒一二三区在线视频-麻豆精选传媒4区2021-在线视频99-在线视频a | 亚洲精品高清国产一久久,免费观看国产,国产欧美日韩精品在钱,国产在线观看入口,国产日产欧美精品一区二区三区,国产一级在线观看 7788理论片在线观看-7788av-777午夜精品免费播放-777奇米影视一区二区三区-蜜桃传媒在线-蜜桃成熟时1997在线看免费看 | 91黄色影院-91黄色视屏-91黄色大片-91黄-91果冻制片厂广电传媒-91果冻传媒 | 激情综合欧美-激情综合激情五月-激情综合丁香-激情综-四虎影视精品-四虎影视国产在线观看精品 | 欧美日本免费-欧美日本韩国-欧美日本国产-欧美日本二区-在线观看导航-在线观看成人网 | 九九99国产精品视频-九草在线观看-九草在线-精品综合久久久久久蜜月-亚洲厕所凸轮-亚洲播播 | 麻豆系列国产剧在线观看-麻豆系列 在线视频-麻豆午夜视频-麻豆污视频-麻豆网站在线免费观看-麻豆网站在线看 | 日本成人一区,欧美日韩亚洲无线码在线观看,交换伦交,在线观看国产视频,日韩欧美视频一区,国产精品欧美一区二区三区不卡 | 精品久久久久久蜜臂a∨-精品久久久久久蜜臀-精品久久久久久免费看-精品久久久久久免费影院-精品久久久久久清纯-精品久久久久久日韩字幕无 | 亚洲午夜久久久久中文字幕,欧美精品久久久久久久久大尺度,91精品推荐,九九久久99综合一区二区,哪里有毛片,精品亚洲一区二区三区 精品国产91乱码一区二区三区,成人国产一区二区三区精品,亚洲一区免费在线观看,日韩在线一区二区三区免费视频,波多野吉衣在线观看,日韩一级精品久久久久 | 99re最新网址-99re这里只有精品在线观看-99re这里只有精品视频在线观看-99re这里只有精品视频-嗯好爽视频-嗯啊在线观看免费影院 99只有精品-99这里只有精品在线-99这里只有精品视频-99这里只有精品66视频-欧美国产视频-欧美国产日韩综合 | 国内自拍中文字幕,久久久一本精品99久久精品66,精品400部自拍视频在线播放,国产麻豆精品在线,日韩欧美高清视频,久久久免费精品视频 | 免费的成人a视频在线观看-免费岛国小视频在线观看-免费岛国-免费大香伊蕉在人线国产-免费大片黄在线观看日本-免费大片黄手机在线观看 | 韩国三级一区-韩国三级香港三级日本三级la-韩国三级香港三级日本三级-韩国三级视频网站-日韩欧美一及在线播放-日韩欧美一二三区 久久久久久久久国产-久久久久久久久97-久久久久久久国产视频-久久久久久久国产精品影院-午夜精-午夜寂寞院 | 亚洲 欧美 日韩 在线,97热久久免费频精品99国产成人,另类激情亚洲,久久99九九精品免费,久久综合精品国产一区二区三区,2020精品极品国产色在线观看 | 日本a天堂,亚洲精品乱码久久久久久,欧美精品一区二区三区在线播放,国产亚洲视频在线观看,国产丰满眼镜女在线观看,亚洲日韩欧美综合 | 波多野结衣在线中文-波多野结衣在线影视免费观看-波多野结衣在线影视-波多野结衣在线一区二区-波多野结衣在线一区-波多野结衣在线网址 | 日韩专区第一页-日韩中文字幕在线亚洲一区-日韩中文字幕在线观看视频-日韩中文字幕在线播放-日韩中文字幕一区二区不卡-日韩中文字幕一区 | 综合色网站-综合色图-综合色婷婷-综合色天天-乱淫视频-乱淫片 | 热血影院-热热99-热久在线-热久久最新网址-成人毛片一区二区三区-成人毛片视频免费网站观看 | 亚洲成人777777-亚洲成av人在线视-亚洲成av人影片在线观看-亚洲成av人片在线观看-玖玖色资源-玖玖色在线 | 国产精品福利在线观看入口-国产精品福利在线观看秒播-国产精品福利在线观看免费不卡-国产精品福利一区二区亚瑟-四虎免费入口-四虎免费看片 | 免费观看a视频-免费观看a级网站-免费观看a级片-免费高清在线爱做视频-一本色道久久综合亚洲精品高清-一本色道久久综合亚洲精品 | 美女操网站-美女操操操-美女操操-美女被日动态图-美女被猛男躁免费视频网站-美女被漫画 | 精品欧美小视频在线观看-精品欧美18videosex欧美-精品免费在线视频-精品免费视在线视频观看-亚洲视频区-亚洲视频欧美在线专区 |