關係模型組成:關係數據庫,關係操作集合,關係完整性約束。
關係的三類完整性約束:
(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。