數據庫關係的3種完整性約束+5種範式

關係模型組成:關係數據庫,關係操作集合,關係完整性約束。

關係的三類完整性約束:

(1)實體完整性(必須)

若屬性A是基本關係R的主屬性,則A不能取空值。

檢查和違約處理:

1)檢查主碼值是否唯一,如果不唯一則拒絕插入或修改。

2)檢查主碼的各個屬性是否爲空,只要有一個爲空就拒絕插入或修改。

(2)參照完整性(必須)

若屬性F是基本關係R的外碼,它與基本關係S的主碼K相對應,則對於R中每個元組在F上的值要麼爲空值,要麼等於S中某個元組的主碼值。

檢查和違約處理:

被參照表 參照表 違約處理
可能破壞參照完整性 插入元組 拒絕
可能破壞參照完整性 修改外碼值 拒絕
刪除元組 可能破壞參照完整性 拒絕/級連刪除/設置爲空值
修改主碼值 可能破壞參照完整性 拒絕/級連刪除/設置爲空值

(3)用戶定義的完整性(可選)

比如唯一性、能否取空值等。

候選碼:設K是R<U,F>的屬性,若K->U,則K爲R的候選碼。

主碼:從候選碼中選擇一個。

主屬性:包含在任何一個候選碼中的屬性。

非主屬性:不包含在任何碼中的屬性。

範式:

5NF<4NF<BCNF<3NF<2NF<1NF

第一範式(1NF):每一個分量必須是不可分的數據項。

存在問題:數據冗餘太大,更新異常,插入異常,刪除異常。

違反例子:F={Sno->Sdept, Sdept->Mname, (Sno, Cno)->Grade}

分解爲合格:S(Sno, Sdept, Sno->Sdept), SC(Sno, Cno, Grade, (Sno, Cno)->Grade), DEPT(Sdept, Mname, Sdept->Mname)

第二範式(2NF):若R屬於1NF,且每一個非主屬性完全函數依賴於碼,則R屬於2NF。

存在問題:插入異常,刪除異常,修改複雜。

違反例子:{(Sno, Cno)->完全函數依賴Grade), Sno->Sdept, (Sno, Cno)->部分函數依賴Sdept, Sno->Sloc, (Sno, Cno)->部分函數依賴Sloc}。

分解爲合格:SC(Sno, Cno, Grade, (Sno, Cno)->Grade), SL(Sno, Sdept, Sloc, Sno->Sdept, Sno->Sloc, Sdept->Sloc)

第三範式(3NF):若R屬於3NF,則每一個非主屬性既不部分依賴於碼,也不傳遞依賴於碼。

違反例子:上面的SL是不屬於3NF的,因爲有傳遞函數依賴。

分解爲合格:SD(Sno, Sdept, Sno->Sdept), DL(Sdept, Sloc, Sdept->Sloc)。

BCNF:所有非主屬性對每一個碼都是完全函數依賴,所有主屬性對每一個不包含它的碼,也是完全函數依賴,沒有任何屬性完全函數依賴於非碼的任何一組屬性。

若R屬於BCNF,則一定屬於3NF;反過來不成立。

第四範式(4NF):屬性之間不允許有非平凡(若多值依賴X->->Y中,Z爲空,則稱X->->Y爲平凡的多值依賴)且非函數依賴(X->Y)的多值依賴。

若R屬於4NF,則一定屬於BCNF。

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章