資料完整性的設計

2021-06-18 16:00:47 字數 1763 閱讀 4877

資料完整性,從應用的層次來看,主要在於三個層次的資料驗證,即資料庫層,應用介面層和業務邏輯層。

資料庫層級中的資料完整性驗證,是最基本的資料驗證。資料庫通過主鍵的唯一性保證實體的唯一;通過外來鍵,保證引用完整性;通過資料型別,保證資料值正確;通過非空約束,保證資料不含無意義值;通過附加的約束(如:check等),保證資料值在範圍之內;同時,觸發器還可以保證簡單的表之間的完整性。應用介面處理的資料完整性,主要是使用者輸入上的資料驗證;通過介面的驗證,讓後面的業務邏輯和資料庫接收比較正確的資料。業務邏輯中處理的完整性,主要是驗證資料在業務方面的正確性,體現在多表間複雜關係的驗證,有些資料中稱作是業務規則。

資料完整性的驗證設計,需要在三個層次方面同時考慮到,理論上在任何乙個層級都可以實現資料完整性驗證。資料庫加上各種約束,只能保證資料嚴格依據定義,在這一級上,資料只是無意義的符號資料,而不是資訊;使用資料庫的觸發器機制,可以驗證簡單的關係及業務規則,但是由於資料庫的可移植性、安全性等因素,資料庫上不適合放置大量的驗證。介面上的資料驗證,也可以驗證資料的型別、範圍等,能夠讓使用者較快地得到錯誤報告,獲得修改輸入資料的機會。一些比較複雜的驗證,則放在業務邏輯中比較合適,一是可能比較複雜,需要很多計算,同時還和其它業務處理緊密相關,另外也是由於變化較多,需要特別對待;業務邏輯的驗證中,有一些不需要實時驗證,可以設計成單獨的用例(use-case)。

vata系統中,mawb和uld+bsa計畫表(bsaplan)的關係問題,就牽扯到三方面的驗證。uld+bsa的分配表(assignbsa),是mawb彙總表和bsaplan的連線,當刪除mawb時,必須檢查分配表assignbsa是否完整,分配表assignbsa中不能存在無頭的mawb;而分配表assignbsa和計畫表bsaplan是一對多關係,bsaplan是主表。在uld數量方面,分配uld+bsa時,ops可以指定mawb為bsa或者non-bsa,同時分配uld數量,系統要檢查是否超出計畫量;而輸入mawb時,要先彙總mawb,得到航班+日期的bsa+uld使用情況,檢查比較bsaplan中的bsa計畫量,分配量,如果餘額不足就提示。

設計實現時,assignbsa和bsaplan的關係是主從表,由資料庫主外來鍵來維護驗證,同時在介面上要維護該主從關係,刪除、增加時,需要注意主從表的順序。mawb和assignbsa的關係,在mawb(輸入和匯入)的介面上驗證;而分配和輸入mawb時,數量關係則由業務邏輯來驗證。

資料完整性設計,還牽扯到另外乙個問題,就是一致性。資料驗證可能居於三個層級上,設計時要保證從任何乙個層級進入的資料保持一致,由於資料庫層級的資料驗證是自動生效的,所以重點是考慮業務邏輯和介面層。當資料中有一些特殊意義的編碼存在時,保持資料的一致性,就是乙個比較困難的決策。

比如身份證的編碼,編碼中包含了出生地、生日、性別等資訊,同時還存在一位校驗位;編碼長度是15或者18位,如果是15位,需要自動轉換為18位;然後驗證生日、性別等是否相符;計算17位編碼的校驗和,驗證校驗碼。考慮這樣乙個系統,比如稅務局的計稅系統,完整的計稅系統包含兩部分軟體,稅務局本身系統和納稅公司報稅客戶端,身份證在稅務局和公司客戶端系統中都進行驗證。可是由於驗證的不一致,客戶端中匯出的報稅資料,在稅務局系統中就不能通過驗證。稅務局和納稅公司需要多次交流溝通,才能解決報稅資料中存在的問題,原來客戶端軟體只驗證了生日和校驗位,而稅務局系統還驗證性別。

應該怎樣才能避免系統應用以後出現類似的情況呢?設計時,就把這類驗證定義為單獨的功能集,集中在一起便於修改、維護,保持一致性。實現時最簡單的方案是,抽離出所有的資料驗證邏輯,組合成乙個資料驗證的服務包(類),在介面和業務邏輯中,呼叫服務包的服務來驗證資料的完整性。在分布式的系統中,還應該注意部署和公升級的及時性。

MySQL資料完整性(實體完整性 域完整性)

資料完整性 為保證插入到資料庫中的資料是正確的,防止使用者輸入錯誤的資料 分為實體完整性 域完整性 參照完整性 下節再說 1 實體完整性 實體指的是表中的一行,一行記錄對應乙個實體 通過主鍵實現 主鍵 關鍵字 primary key 特點 不能為null,並且唯一。邏輯主鍵 推薦 例如id,不代表實...

資料完整性

資料完整性定義 是指資料庫中的資料的正確性和完整性。資料完整性的型別 要求的資料。not null。有效檢查。資料的有效範圍檢查。字段檢查約束。資料域。實體完整性。主鍵欄位唯 一 非空。引用完整性引發的問題 1 插入 更新子表記錄的外鍵值在主表主鍵中不存在。2 刪除 更新父表的主鍵記錄有關聯外來鍵記...

資料完整性

quote b 更新丟失 b 當有兩個寫程序同時修改相同的資料時,往往會出現乙個寫程序做的修改覆蓋了另乙個寫程序的修改。這種情況是完整性問題最常見的型別。互斥鎖的設計就是防範這種問題的出現。b 髒讀 b 乙個事務修改的資料在提交前被另乙個事務讀取,就會發生髒讀。由於事務提交的修改有可能會被回滾,因而...