完整性限制(Integrity constraints)
- 實體完整性限制(entity integrity constraints)
- 參考完整性限制(referential integrity constraints)
實體完整性限制(entity integrity constraints)
表格中的主鍵須為唯一且不能為空(NULL),確保主鍵能識別表格中的每筆紀錄,避免資料重複與不一致。
參考完整性限制(referential integrity constraints)
表格中的外部鍵可以為空或必參考到另一個表格的主鍵,該主鍵需存在。確保表格間的關聯。避免資料不存在,如引用某個不存在的資料表。當主鍵被更新或刪除需考慮如何影響到外部鍵,如連鎖更新(cascade update)或連鎖刪除(cascade delete)
分治法
資料結構應用分治法的排序有合併/快速/堆排序,時間複雜度為O(nlogn),分治法(divide and conquer)就是將一個大問題分解為小問題,解決小問題將之合併成最終答案。以分治法考慮為何需要有完整性限制,首先沒完整性限制會遇到表格中有資料重複的問題,當你用一個屬性值取資料時,因為該屬性值重複,所以會取到多筆紀錄,你得從多筆記錄中發現那筆自己想找的記錄很花時間。如果取資料能一次就找到想找的那筆資料就好了,這時我們把表格中的一個屬性設為唯一,即該屬性沒有重複值,之後我們找資料就能用唯一的屬性一次取得想要的那筆資料了。
另一個問題是,我們用一個表格中的一個屬性關聯(關聯屬性)另一個表格的一個屬性(被關聯屬性),可以想成樂高積木的凸面與凹面,當凸面與凹面規格一致就可以組合,而兩個表格就像兩塊積木,它倆的組合面是關聯屬性與被關聯屬性,當兩屬性值一樣時就能結合在一起。如果一個關聯屬性值存在,一個被關聯屬性值不存在時,會出現一個問題,就是我找出來的那筆記錄有少資料,因為被關聯屬性值不存在,以至於無法判斷兩屬性值是否一樣,所以無法結合在一起,就如同兩塊積木規格不同而無法組合一樣。所以我們對表格加一道限制,被關聯屬性值需存在,如此就能解決無法結合的問題了。
解決了上述兩個問題,我們將解法合併為一個完整性限制,以後在設計資料表時,套用完整性限制,就能讓設計出來的資料表具完整性且沒有重複。
常考題目
- 對於關聯資料表哪些屬性需設為參考完整性限制,哪些外部鍵屬性需設不可為空?
- 實體/參考完整性限制的定義或特性
- 標示ERD 限制
- 用SQL 對已建立的表格新增限制
- 用SQL 建表格加入限制名稱
- 資料庫設計第二階段邏輯資料庫設計,將概念資料模型(ERD)轉邏輯資料模型含正規化表格與完整性限制。
沒有留言:
張貼留言
寫下幸福點子吧!