時間:2022-11-18 20:30:01 | 來源:信息時代
時間:2022-11-18 20:30:01 來源:信息時代
數(shù)據(jù)庫完整性類型 : 在不同級別的粒度上,數(shù)據(jù)庫完整性的實現(xiàn)。由此,數(shù)據(jù)庫完整性分為域完整性、實體完整性、參照完整性、用戶定義完整性和其他完整性。域完整性定義了關系屬性的值域: 實體完整性保證了各記錄的可區(qū)分性: 參照完整性確保了維護關系之間的聯(lián)系的必要性; 用戶定義完整性是針對某一應用環(huán)境的完整性約束條件; 其他完整性包括函數(shù)依賴與多值依賴等主要用于規(guī)范化數(shù)據(jù)庫設計。
1.域完整性
域完整性(domain integrity)要求屬性值必須取自其對應的值域; 一個屬性值能否為空值由其語義決定。域完整性約束是最基本的約束。一個域是一個給定屬性的所有可能值的集合。域完整性約束是用來定義這些合法值的規(guī)則。
數(shù)據(jù)類型在數(shù)據(jù)模型中是一種比較便捷的實現(xiàn)方式,因此,在確定系統(tǒng)中的域約束時,選擇一個合適的邏輯類型來定義域是第一步要做的事情。但要注意對一些需要精確定義域的地方,還要附加規(guī)則。 例如, 若選擇一個Integer(取值范圍-32768~32767)數(shù)據(jù)類型作為年齡域定義就不合適,因在實際情況中,年齡的取值范圍在0~150之間已足夠了。
域完整性還要考慮“一個域是否應當包含未知的或者不存在的值”。需要確定這些未知的或者不存在的值能否被系統(tǒng)所接受。
域完整性要盡可能具體地定義由一個域所描述的值的集合。最簡單的描述一個域的方式是列舉域的所有值。例如,Weekends 域可以由集合{“Saturday”,“Sunday”}來描述。當然大多數(shù)域不能預先列舉其所有值,所以要按域的實際情況來定義。有時候列舉一個或多個規(guī)則來約束域成員會更加容易一些。
域完整性往往也是用戶定義完整性的不可或缺的一部分。
2. 實體完整性
實體完整性(entity integrity)指明主鍵值必須是唯一的,且其任何組成部分都不能是空值。
定義實體完整性的必要性是: 關系對應于現(xiàn)實世界中的實體,而現(xiàn)實世界中實體是可區(qū)分的,亦即每個實體應具有唯一性標志。在關系模型中,是以主鍵值作為唯一標志的。若主鍵值為空值,則說明這個實體無法標志,即不可區(qū)分,這顯然是錯誤的。例如,在關系“項目成員(項目、部門、職員姓名)”中,“職員姓名”屬性為主鍵(假設職員不會重名),則“職員姓名”不能取空值。
又如,職員銷售關系“銷售(工號、商品號、銷量)”中,“工號、商品號”為主鍵,則“工號”和“商品號”兩個屬性都不能取空值。
3. 參照完整性
參照完整性(referential integrity)指關系之間的引用應該遵守的規(guī)則,它用于維持關系的元組之間的一致性。參照完整性規(guī)則定義參照關系的外鍵與被參照關系的主鍵之間的引用關系。
對于永久關系的相關表,在更新、插入或刪除記錄時,如果只改其中一個表的記錄,而不改另外一個表的記錄,就會影響數(shù)據(jù)的完整性。
在數(shù)據(jù)庫設計中,實體之間往往存在某種聯(lián)系,在關系模型中實體及實體間的聯(lián)系都是用關系來描述的。這樣就存在著關系與關系間的引用。例如,職員實體和部門實體可以用下面的關系表示,其中主鍵用“*”標識:
職員(工號*,姓名,性別,部門號,年齡)
部門(部門號*,部門名,部門負責人)
這兩個關系之間存在著屬性的引用,即職員關系引用了部門關系的主鍵“部門號”。顯然,部門關系中的“部門號”值必須是確實存在的部門的部門號,即部門關系中有該部門的記錄,亦即職員關系中的“部門號”屬性的取值需要參照部門關系的“部門號”屬性的取值。在這里,職員關系的“部門號”屬性與部門關系的主鍵“部門號”相對應,因此“部門號”屬性是職員關系的外鍵。這里部門關系是被參照關系,職員關系為參照關系,見圖1(a)。
(a)
(b)
圖1 關系的參照圖