關系型數據庫有六個范式,越靠后的范式對數據庫的“要求”越高。
我改寫了描述,讓其更通俗易懂,但是不太嚴謹,以下文字中:列對應屬性、行對應實體、表對應關系。不再一一區分。對于我們使用的關系型數據庫,滿足第三范式即可。
第一范式(1NF)無重復的列即每一行中,不能有兩列的含義完全相同,也不能有某一列的值不確定。
定義:因果關系模式R的每個關系r的屬性都是不可分的數據項,那么就稱R是第一范式的模式。簡單的說,每一個屬性都是原子項,不可分割。 1NF是關系模式應具備的最起碼的條件,如果數據庫設計不能滿足第一范式,就不稱為關系型數據庫。關系數據庫設計研究的關系規范化是在1NF之上進行的。
第二范式(2NF)屬性完全依賴于主鍵 [消除部分子函數依賴]滿足第一范式,且——可以用主鍵(一列或多列)區分每一行。
定義:如果關系模式R是1NF,且每個非主屬性完全函數依賴于候選鍵,那么就稱R是第二范式。簡單的說,第二范式要滿足以下的條件:首先要滿足第一范式,其次每個非主屬性要完全函數依賴與候選鍵,或者是主鍵。也就是說,每個非主屬性是由整個主鍵函數決定的,而不能由主鍵的一部分來決定。
第三范式(3NF)屬性不依賴于其它非主屬性 [消除傳遞依賴]滿足第二范式,且——如果某列不是主鍵或主鍵之一,那么該列僅能出現在一個表中。
如果關系模式R是2NF,且關系模式R(U,F)中的所有非主屬性對任何候選關鍵字都不存在傳遞依賴,則稱關系R是屬于第三范式。簡單的說,第三范式要滿足以下的條件:首先要滿足第二范式,其次非主屬性之間不存在函數依賴。由于滿足了第二范式,表示每個非主屬性都函數依賴于主鍵。如果非主屬性之間存在了函數依賴,就會存在傳遞依賴,這樣就不滿足第三范式。巴德斯科范式(BCNF)滿足第三范式,且——主鍵必須最精簡化。
BC范式是第三范式的增強版,不過也有人說是直接從1NF發展過來的,即每個屬性,包括主屬性或非主屬性,都完全依賴于候選鍵,并且不存在傳遞依賴情況。第四范式(4NF)滿足第三范式,且——對于全鍵表,刪除某一列后,其他列不能重復。
第五范式(5NF)滿足第四范式,且——完全消除行冗余,這樣會把表拆分得過小(一般會拆分成兩列),導致數據庫支離破碎。
前四種范式的關系新聞熱點
疑難解答