明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

數(shù)據(jù)庫(kù)4個(gè)范式你又知道多少

[摘要]本篇文章給大家?guī)淼膬?nèi)容是關(guān)于數(shù)據(jù)庫(kù)四個(gè)范式,有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對(duì)你有所幫助。1、1NF(第一范式)第一范式是指數(shù)據(jù)庫(kù)表中的每一列都是不可分割的基本數(shù)據(jù)項(xiàng),同一列中不能...
本篇文章給大家?guī)淼膬?nèi)容是關(guān)于數(shù)據(jù)庫(kù)四個(gè)范式,有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對(duì)你有所幫助。

1、1NF(第一范式)

第一范式是指數(shù)據(jù)庫(kù)表中的每一列都是不可分割的基本數(shù)據(jù)項(xiàng),同一列中不能有多個(gè)值,即實(shí)體中的某個(gè)屬性不能有多個(gè)值或者不能有重復(fù)的屬性。

如果出現(xiàn)重復(fù)的屬性,就可能需要定義一個(gè)新的實(shí)體,新的實(shí)體由重復(fù)的屬性構(gòu)成,新實(shí)體與原實(shí)體之間為一對(duì)多關(guān)系。第一范式的模式要求屬性值不可再分裂成更小部分,即屬性項(xiàng)不能是屬性組合或是由一組屬性構(gòu)成。

簡(jiǎn)而言之,第一范式就是無重復(fù)的列。例如,由“職工號(hào)”“姓名”“電話號(hào)碼”組成的表(一個(gè)人可能有一部辦公電話和一部移動(dòng)電話),這時(shí)將其規(guī)范化為1NF可以將電話號(hào)碼分為“辦公電話”和“移動(dòng)電話”兩個(gè)屬性,即職工(職工號(hào),姓名,辦公電話,移動(dòng)電話)。

2、2NF(第二范式)

第二范式(2NF)是在第一范式(1NF)的基礎(chǔ)上建立起來的,即滿足第二范式(2NF)必須先滿足第一范式(1NF)。第二范式(2NF)要求數(shù)據(jù)庫(kù)表中的每個(gè)實(shí)例或行必須可以被唯一地區(qū)分。為實(shí)現(xiàn)區(qū)分通常需要為表加上一個(gè)列,以存儲(chǔ)各個(gè)實(shí)例的唯一標(biāo)識(shí)。

如果關(guān)系模型R為第一范式,并且R中的每一個(gè)非主屬性完全函數(shù)依賴于R的某個(gè)候選鍵,則稱R為第二范式模式(如果A是關(guān)系模式R的候選鍵的一個(gè)屬性,則稱A是R的主屬性,否則稱A是R的非主屬性)。

例如,在選課關(guān)系表(學(xué)號(hào),課程號(hào),成績(jī),學(xué)分),關(guān)鍵字為組合關(guān)鍵字(學(xué)號(hào),課程號(hào)),但由于非主屬性學(xué)分僅依賴于課程號(hào),對(duì)關(guān)鍵字(學(xué)號(hào),課程號(hào))只是部分依賴,而不是完全依賴,因此此種方式會(huì)導(dǎo)致數(shù)據(jù)冗余以及更新異常等問題,解決辦法是將其分為兩個(gè)關(guān)系模式:學(xué)生表(學(xué)號(hào),課程號(hào),分?jǐn)?shù))和課程表(課程號(hào),學(xué)分),新關(guān)系通過學(xué)生表中的外關(guān)鍵字課程號(hào)聯(lián)系,在需要時(shí)進(jìn)行連接。

3、3NF(第三范式)

如果關(guān)系模型R是第二范式,且每個(gè)非主屬性都不傳遞依賴于R的候選鍵,則稱R是第三范式的模式。

以學(xué)生表(學(xué)號(hào),姓名,課程號(hào),成績(jī))為例,其中學(xué)生姓名無重名,所以該表有兩個(gè)候選碼(學(xué)號(hào),課程號(hào))和(姓名,課程號(hào)),故存在函數(shù)依賴:學(xué)號(hào)——>姓名,(學(xué)號(hào),課程號(hào))——>成績(jī),唯一的非主屬性成績(jī)對(duì)碼不存在部分依賴,也不存在傳遞依賴,所以屬性屬于第三范式。

4、BCNF(BC范式)

它構(gòu)建在第三范式的基礎(chǔ)上,如果關(guān)系模型R是第一范式,且每個(gè)屬性都不傳遞依賴于R的候選鍵,那么稱R為BCNF的模式。

假設(shè)倉(cāng)庫(kù)管理關(guān)系表(倉(cāng)庫(kù)號(hào),存儲(chǔ)物品號(hào),管理員號(hào),數(shù)量),滿足一個(gè)管理員只在一個(gè)倉(cāng)庫(kù)工作;一個(gè)倉(cāng)庫(kù)可以存儲(chǔ)多種物品,則存在如下關(guān)系:

(倉(cāng)庫(kù)號(hào),存儲(chǔ)物品號(hào))——>(管理員號(hào),數(shù)量)

(管理員號(hào),存儲(chǔ)物品號(hào))——>(倉(cāng)庫(kù)號(hào),數(shù)量)

所以,(倉(cāng)庫(kù)號(hào),存儲(chǔ)物品號(hào))和(管理員號(hào),存儲(chǔ)物品號(hào))都是倉(cāng)庫(kù)管理關(guān)系表的候選碼,表中唯一非關(guān)鍵字段為數(shù)量,它是符合第三范式的。但是,由于存在如下決定關(guān)系:

(倉(cāng)庫(kù)號(hào))——>(管理員號(hào))

(管理員號(hào))——>(倉(cāng)庫(kù)號(hào))

即存在關(guān)鍵字段決定關(guān)鍵字段的情況,因此其不符合BCNF。把倉(cāng)庫(kù)管理關(guān)系表分解為兩個(gè)關(guān)系表倉(cāng)庫(kù)管理表(倉(cāng)庫(kù)號(hào),管理員號(hào))和倉(cāng)庫(kù)表(倉(cāng)庫(kù)號(hào),存儲(chǔ)物品號(hào),數(shù)量),這樣這個(gè)數(shù)據(jù)庫(kù)表是符合BCNF的,并消除了刪除異常、插入異常和更新異常。

5、4NF(第四范式)

設(shè)R是一個(gè)關(guān)系模型,D是R上的多值依賴集合。如果D中存在凡多值依賴X->Y時(shí),X必是R的超鍵,那么稱R是第四范式的模式。

例如,職工表(職工編號(hào),職工孩子姓名,職工選修課程),在這個(gè)表中,同一個(gè)職工可能會(huì)有多個(gè)職工孩子姓名,同樣,同一個(gè)職工也可能會(huì)有多個(gè)職工選修課程,即這里存在著多值事實(shí),不符合第四范式。如果要符合第四范式,只需要將上表分為兩個(gè)表,使它們只有一個(gè)多值事實(shí),例如職工表一(職工編號(hào),職工孩子姓名),職工表二(職工編號(hào),職工選修課程),兩個(gè)表都只有一個(gè)多值事實(shí),所以符合第四范式。

1 、第一范式(1NF)
在任何一個(gè)關(guān)系數(shù)據(jù)庫(kù)中,第一范式(1NF)是對(duì)關(guān)系模式的基本要求,不滿足第一范式(1NF)的數(shù)據(jù)庫(kù)就不是關(guān)系數(shù)據(jù)庫(kù)。
所謂第一范式(1NF)是指數(shù)據(jù)庫(kù)表的每一列(即每個(gè)屬性)都是不可分割的基本數(shù)據(jù)項(xiàng),同一列中不能有多個(gè)值,即實(shí)體中的某個(gè)屬性不能有多個(gè)值或者不能有重復(fù)的屬性。簡(jiǎn)而言之,第一范式就是無重復(fù)的列。
2、 第二范式(2NF)
第二范式(2NF)是在第一范式(1NF)的基礎(chǔ)上建立起來的,即滿足第二范式(2NF)必須先滿足第一范式(1NF)。第二范式(2NF)要求數(shù)據(jù)庫(kù)表中的每個(gè)實(shí)例或行必須可以被唯一地區(qū)分。為實(shí)現(xiàn)區(qū)分通常需要為表加上一個(gè)列,以存儲(chǔ)各個(gè)實(shí)例的唯一標(biāo)識(shí)。員工信息表中加上了員工編號(hào)(emp_id)列,因?yàn)槊總(gè)員工的員工編號(hào)是唯一的,因此每個(gè)員工可以被唯一區(qū)分。這個(gè)唯一屬性列被稱為主關(guān)鍵字或主鍵、主碼。
第二范式(2NF)要求實(shí)體的屬性完全依賴于主關(guān)鍵字。所謂完全依賴是指不能存在僅依賴主關(guān)鍵字一部分的屬性,如果存在,那么這個(gè)屬性和主關(guān)鍵字的這一部分應(yīng)該分離出來形成一個(gè)新的實(shí)體,新實(shí)體與原實(shí)體之間是一對(duì)多的關(guān)系。為實(shí)現(xiàn)區(qū)分通常需要為表加上一個(gè)列,以存儲(chǔ)各個(gè)實(shí)例的唯一標(biāo)識(shí)。簡(jiǎn)而言之,第二范式就是非主屬性依賴于主關(guān)鍵字。
3 、第三范式(3NF)
滿足第三范式(3NF)必須先滿足第二范式(2NF)。在滿足第二范式的基礎(chǔ)上,切不存在傳遞函數(shù)依賴,那么就是第三范式。簡(jiǎn)而言之,第三范式就是屬性不依賴于其它非主屬性。

以上就是數(shù)據(jù)庫(kù)四個(gè)范式你又了解多少的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!


學(xué)習(xí)教程快速掌握從入門到精通的SQL知識(shí)。