關系的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。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM