數據庫關係模型範式總結

鍵總結

  • 超鍵:關係的唯一性約束。可以有冗餘,例如(studentnr)是超鍵,(studentnr,name)也是超鍵。
  • 鍵(候選鍵):最小超鍵,其他屬性都完全函數依賴該屬性。不含有多餘屬性。
  • 主鍵:用於標識關係中元組的候選鍵,一般在鍵中選一個作爲主鍵。

候選鍵由主鍵和備用鍵組成。
超鍵 >= 候選鍵 >= 主鍵

範式總結

這篇文章講得非常細緻(https://www.cnblogs.com/langdashu/p/5924082.html)

第一範式(1NF):

每個屬性類型都是原子單值,則關係爲第一範式。

第二範式(2NF):

在上一條基礎上排除部分函數依賴,即每個非主屬性類型完全依賴於關係的鍵,則關係爲第二範式。
:R1(SSN,Pnumber,Pname,hours)
函數依賴:Pnumber->Pname,(SSN,Pnumber)->hours
鍵:(SSN,Pnumber)
主屬性:SSN,Pnumber
非主屬性:Pname,hours
Pname對於鍵(SSN,Pnumber)是部分依賴,所以不是第二範式,改爲:
R11(SSNPnumber,hours)
R12(SSN,Pname)

第三範式(3NF):

在上一條基礎上排除傳遞函數依賴,即每個非主屬性類型只依賴鍵,不依賴其他非主屬性,則關係爲第三範式。
:R1(SSN,ename,dnumber,dname,dmgrssn)
一個員工在一個部門,一個部門有多個員工,一個部門有一個經理。
函數依賴:SSN->ename,SSN->dnumber,dnumber->dname,dnumber->dmgrssn
鍵:SSN,dnumber
主屬性:SSN,dnumber
非主屬性:ename,dname,dmgrssn
因爲SSN可推出dnumber,dnumber可推出dname和dmgrssn,存在傳遞函數依賴,不是第三範式,可改爲:
R11(SSN,ename,dnumber)
R12(dnumber,dname,dmgress)

巴斯範式(BCNF):

在上一條基礎上每個非平凡函數依賴X->Y(X不包含Y),X是超鍵(即X是候選鍵或其一個超集),則關係爲巴斯範式。通俗來說就是消除主屬性對於鍵的部分與傳遞函數依賴。
例1:R1(SUPNR,SUPNAME,PRODNR,QUANTITY)
一個供應商可以供應多個產品,一個產品能由多個供應商供應且每個供應商有唯一的命名
函數依賴:supnr->supname,supname->supnr,(supnr,prodnr)->quantity
鍵:(supnr,prodnr),(supname,prodnr)
主屬性:supnr,supname,prodnr
非主屬性:quantity
兩種判斷方法:
1.存在主屬性supname對於鍵(supnr,prodnr)的部分函數依賴,所以不是BCNF
2.supnr->supname,supname->supnr左邊不是鍵,所以不是BCNF
改爲BCNF:
R11(SUPNRPRODNR,QUANTITY)
R12(SUPNR,SUPNAME)
例2:STC(S,T,C)中,S表示學生,T表示教師,C表示課程。假設每個教師只教一門課,每門課有若干老師,某一學生選一門課就對應一個老師。
函數依賴:(S,C)->T,(S,T)-> C,T-> C
鍵:(S,C),(S,T)
主屬性:S,C,T
兩種判斷方法:
1.主屬性是:S,C,T,因爲T就能推出C,還有(S,T)->C,有主屬性對於鍵的部分函數依賴 ,所以不是BCNF。
2.或者(S,C)和(S,T)都是鍵,但T不是,所以STC屬於第三範式,不屬於BCNF。

第四範式(4NF):

在上一條基礎上若存在平凡多值依賴(當每個X值精確地確定一組Y值時,存在從X到Y,X->->Y的多值依賴性,與其它屬性類型無關),對於它的每個非平凡的多值依賴關係X->->Y,X是超鍵,則關係爲第四範式。簡單來說就是消除關係中的多對多關係。
:R(course,instructor,textbook)
假如一個課程能由不同的老師授課,且有多種教材。該關係不是第四範式,改爲:
R11(coursetextbook
R12(courseinstructor

由上到下越來越嚴格,下面的一定屬於上面,反之不一定成立

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