數(shù)據完整性
? ? ? ? 要想了解這三類完整性約束瑰煎,先要了解什么是數(shù)據完整性。
? ? ? ? 數(shù)據庫中的數(shù)據是從外界輸入的俗孝,而數(shù)據的輸入由于種種原因酒甸,會發(fā)生輸入無效或錯誤信息。保證輸入的數(shù)據符合規(guī)定赋铝,成為了數(shù)據庫系統(tǒng)插勤,尤其是多用戶的關系數(shù)據庫系統(tǒng)首要關注的問題。數(shù)據完整性因此而提出革骨。
? ? ? ? 數(shù)據完整性(Data Integrity)是指數(shù)據的精確性(Accuracy) 和可靠性(Reliability)农尖。即數(shù)據完整性是指數(shù)據庫中存儲的數(shù)據是有意義的或正確的,和現(xiàn)實世界相符良哲。它是應防止數(shù)據庫中存在不符合語義規(guī)定的數(shù)據卤橄,和防止因錯誤信息的輸入輸出造成無效操作或錯誤信息而提出的。
? ? ? ? 數(shù)據完整性分為三類:實體完整性(Entity Integrity)臂外、參照完整性(Referential Integrity)窟扑、用戶自定義完整性(User-definedIntegrity)。
? ? ? ? 數(shù)據庫采用多種方法來保證數(shù)據完整性漏健,包括外鍵嚎货、約束、規(guī)則和觸發(fā)器蔫浆。系統(tǒng)很好地處理了這幾者的關系殖属,并針對不同的具體情況用不同的方法進行,相互交叉使用瓦盛,相補缺點洗显。
? ? ? ? 關系模型允許定義三類完整性約束;實體完整性原环、參照完整性和用戶定義的完整性挠唆。其中實體完整性和參照完整性是關系模型必須滿足的完整性約束條件,體現(xiàn)了具體領域中的語義約束嘱吗。
一玄组、實體完整性
? ? ? ? 實體完整性要求每個數(shù)據表都必須有主鍵,而作為主鍵的所有字段谒麦,其屬性必須是獨一及非空值俄讹。
? ? ? ? 實體完整性要保證關系中的每個元組都是可識別的和惟一的,指關系數(shù)據庫中所有的表都必須有主鍵,
? ? ? ? 而且表中不允許存在無主鍵值的記錄和主鍵值相同的記錄。因為實體必須可區(qū)分导街。
? ? ? ? 實際上,當在表中定義了主鍵時踪蹬,數(shù)據庫管理系統(tǒng)會自動保證數(shù)據的實體完整性驹溃,即保證不允許存在主鍵值為空的記錄以及主鍵值重復的記錄。
二延曙、參照完整性
? ? ? ? 參照完整性也稱為引用完整性。參照的完整性要求關系中不允許引用不存在的實體亡哄。與實體完整性是關系模型必須滿足的完整性約束條件枝缔,目的是保證數(shù)據的一致性。
? ? ? ? 現(xiàn)實世界中的實體之間往往存在著某種聯(lián)系蚊惯,在關系模型中愿卸,實體以及實體之間的聯(lián)系都是用關系來表示的,這樣就自然存在著關系與關系之間的引用截型。
? ? ? ? 而參照完整性就是描述實體之間的聯(lián)系的趴荸。參照完整性一般是指多個實體或關系之間的關聯(lián)關系。
? ? ? ? 例如宦焦,若基本關系 R 的外鍵為 F发钝,它與基本關系 S 的主鍵 K 相對應(基本關系 R 和 S 不一定是不同的關系),則對于 R 中的每個元組在 F 上的值必須為:
? ? (1)空值波闹,F(xiàn) 的每個屬性值均為空值酝豪。
? ? (2)S 中某個元組中的主鍵值。
? ? ? ? 即參照的關系中的屬性值必須能夠在被參照關系找到或者取空值精堕,否則不符合數(shù)據庫的語義孵淘。
? ? ? ? 在實際操作時如更新、刪除歹篓、插入一個表中的數(shù)據瘫证,通過參照引用相互關聯(lián)的另一個表中的數(shù)據,來檢查對表的數(shù)據操作是否正確庄撮,不正確則拒絕操作背捌。
三、用戶定義完整性
? ? ? ? 用戶定義完整性也稱為域完整性或語義完整性洞斯。用戶自定義完整性是針對某一具體關系數(shù)據庫的約束條件载萌,它反映某一具體應用所涉及的數(shù)據必須滿足的語義要求。
? ? ? ? 實際上就是指明關系中屬性的取值范圍巡扇,防止屬性的值與應用語義矛盾扭仁。
? ? ? ? 關系模型應提供定義和檢驗這類完整性的機制,以便用統(tǒng)一的系統(tǒng)方法處理它們厅翔,而不要由應用程序承擔這一功能
? ? ? ? 主要包括非空約束乖坠、唯一約束、檢查約束刀闷、主鍵約束熊泵、外鍵約束仰迁。