最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
當(dāng)前位置: 首頁 - 科技 - 知識(shí)百科 - 正文

數(shù)據(jù)庫設(shè)計(jì)的三大范式、BCNF、4NF

來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-09 15:12:59
文檔

數(shù)據(jù)庫設(shè)計(jì)的三大范式、BCNF、4NF

數(shù)據(jù)庫設(shè)計(jì)的三大范式、BCNF、4NF:一、理解數(shù)據(jù)庫的范式需要理解幾個(gè)基本概念: 碼:表中可以唯一確定一個(gè)元組的某個(gè)屬性(或者屬性組),如果這樣的碼有不止一個(gè),那么大家都叫候選碼,我們從候選碼中挑一個(gè)出來做老大,它就叫主碼。相當(dāng)于鍵的意思。主屬性:一個(gè)屬性只要在任何一個(gè)候選碼中
推薦度:
導(dǎo)讀數(shù)據(jù)庫設(shè)計(jì)的三大范式、BCNF、4NF:一、理解數(shù)據(jù)庫的范式需要理解幾個(gè)基本概念: 碼:表中可以唯一確定一個(gè)元組的某個(gè)屬性(或者屬性組),如果這樣的碼有不止一個(gè),那么大家都叫候選碼,我們從候選碼中挑一個(gè)出來做老大,它就叫主碼。相當(dāng)于鍵的意思。主屬性:一個(gè)屬性只要在任何一個(gè)候選碼中

一、理解數(shù)據(jù)庫的范式需要理解幾個(gè)基本概念: 碼:表中可以唯一確定一個(gè)元組的某個(gè)屬性(或者屬性組),如果這樣的碼有不止一個(gè),那么大家都叫候選碼,我們從候選碼中挑一個(gè)出來做老大,它就叫主碼。相當(dāng)于鍵的意思。主屬性:一個(gè)屬性只要在任何一個(gè)候選碼中

一、理解數(shù)據(jù)庫的范式需要理解幾個(gè)基本概念:
碼:表中可以唯一確定一個(gè)元組的某個(gè)屬性(或者屬性組),如果這樣的碼有不止一個(gè),那么大家都叫候選碼,我們從候選碼中挑一個(gè)出來做老大,它就叫主碼。相當(dāng)于鍵值的意思。 主屬性:一個(gè)屬性只要在任何一個(gè)候選碼中出現(xiàn)過,這個(gè)屬性就是主屬性。 非主屬性:與上面相反,沒有在任何候選碼中出現(xiàn)過,這個(gè)屬性就是非主屬性。 外碼:一個(gè)屬性(或?qū)傩越M),它不是碼,但是它別的表的碼,它就是外碼。
二、范式詳解

為了建立冗余較小、結(jié)構(gòu)合理的數(shù)據(jù)庫,設(shè)計(jì)數(shù)據(jù)庫時(shí)必須遵循一定的規(guī)則。在關(guān)系型數(shù)據(jù)庫中這種規(guī)則就稱為范式。范式是符合某一種設(shè)計(jì)要求的總結(jié)。要想設(shè)計(jì)一個(gè)結(jié)構(gòu)合理的關(guān)系型數(shù)據(jù)庫,必須滿足一定的范式。

在實(shí)際開發(fā)中最為常見的設(shè)計(jì)范式有三個(gè):

1.第一范式(確保每列保持原子性)

第一范式是最基本的范式。如果數(shù)據(jù)庫表中的所有字段值都是不可分解的原子值,就說明該數(shù)據(jù)庫表滿足了第一范式。

第一范式的合理遵循需要根據(jù)系統(tǒng)的實(shí)際需求來定。比如某些數(shù)據(jù)庫系統(tǒng)中需要用到“地址”這個(gè)屬性,本來直接將“地址”屬性設(shè)計(jì)成一個(gè)數(shù)據(jù)庫表的字段就行。但是如果系統(tǒng)經(jīng)常會(huì)訪問“地址”屬性中的“城市”部分,那么就非要將“地址”這個(gè)屬性重新拆分為省份、城市、詳細(xì)地址等多個(gè)部分進(jìn)行存儲(chǔ),這樣在對(duì)地址中某一部分操作的時(shí)候?qū)⒎浅7奖?。這樣設(shè)計(jì)才算滿足了數(shù)據(jù)庫的第一范式,如下表所示。

\

上表所示的用戶信息遵循了第一范式的要求,這樣在對(duì)用戶使用城市進(jìn)行分類的時(shí)候就非常方便,也提高了數(shù)據(jù)庫的性能。

2.第二范式(確保表中的每列都和主鍵相關(guān))

第二范式在第一范式的基礎(chǔ)之上更進(jìn)一層。第二范式需要確保數(shù)據(jù)庫表中的每一列都和主鍵相關(guān),而不能只與主鍵的某一部分相關(guān)(主要針對(duì)聯(lián)合主鍵而言)。也就是說在一個(gè)數(shù)據(jù)庫表中,一個(gè)表中只能保存一種數(shù)據(jù),不可以把多種數(shù)據(jù)保存在同一張數(shù)據(jù)庫表中。

比如要設(shè)計(jì)一個(gè)訂單信息表,因?yàn)橛唵沃锌赡軙?huì)有多種商品,所以要將訂單編號(hào)和商品編號(hào)作為數(shù)據(jù)庫表的聯(lián)合主鍵,如下表所示。

訂單信息表

\

這樣就產(chǎn)生一個(gè)問題:這個(gè)表中是以訂單編號(hào)和商品編號(hào)作為聯(lián)合主鍵。這樣在該表中商品名稱、單位、商品價(jià)格等信息不與該表的主鍵相關(guān),而僅僅是與商品編號(hào)相關(guān)。所以在這里違反了第二范式的設(shè)計(jì)原則。

而如果把這個(gè)訂單信息表進(jìn)行拆分,把商品信息分離到另一個(gè)表中,把訂單項(xiàng)目表也分離到另一個(gè)表中,就非常完美了。如下所示。

\

這樣設(shè)計(jì),在很大程度上減小了數(shù)據(jù)庫的冗余。如果要獲取訂單的商品信息,使用商品編號(hào)到商品信息表中查詢即可。

3.第三范式(確保每列都和主鍵列直接相關(guān),而不是間接相關(guān))

第三范式需要確保數(shù)據(jù)表中的每一列數(shù)據(jù)都和主鍵直接相關(guān),而不能間接相關(guān)。

比如在設(shè)計(jì)一個(gè)訂單數(shù)據(jù)表的時(shí)候,可以將客戶編號(hào)作為一個(gè)外鍵和訂單表建立相應(yīng)的關(guān)系。而不可以在訂單表中添加關(guān)于客戶其它信息(比如姓名、所屬公司等)的字段。如下面這兩個(gè)表所示的設(shè)計(jì)就是一個(gè)滿足第三范式的數(shù)據(jù)庫表。

\

這樣在查詢訂單信息的時(shí)候,就可以使用客戶編號(hào)來引用客戶信息表中的記錄,也不必在訂單信息表中多次輸入客戶信息的內(nèi)容,減小了數(shù)據(jù)冗余。


4、BCNF范式

鮑依斯-科得范式(BCNF是3NF的改進(jìn)形式)


一個(gè)滿足BCNF的關(guān)系模式的條件:

  1.所有非主屬性對(duì)每一個(gè)碼都是完全函數(shù)依賴。

  2.所有的主屬性對(duì)每一個(gè)不包含它的碼,也是完全函數(shù)依賴。

  3.沒有任何屬性完全函數(shù)依賴于非碼的任何一組屬性。

假設(shè)倉庫管理關(guān)系表為StorehouseManage(倉庫ID, 存儲(chǔ)物品ID, 管理員ID, 數(shù)量),且有一個(gè)管理員只在一個(gè)倉庫工作;一個(gè)倉庫可以存儲(chǔ)多種物品。這個(gè)數(shù)據(jù)庫表中存在如下決定關(guān)系:

   (倉庫ID, 存儲(chǔ)物品ID) →(管理員ID, 數(shù)量)

   (管理員ID, 存儲(chǔ)物品ID) → (倉庫ID, 數(shù)量)

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

   (倉庫ID) → (管理員ID)

   (管理員ID) → (倉庫ID)

   即存在關(guān)鍵字段決定關(guān)鍵字段的情況,所以其不符合BCNF范式。

把倉庫管理關(guān)系表分解為二個(gè)關(guān)系表:

   倉庫管理:StorehouseManage(倉庫ID, 管理員ID);

   倉庫:Storehouse(倉庫ID, 存儲(chǔ)物品ID, 數(shù)量)。

   這樣的數(shù)據(jù)庫表是符合BCNF范式的。

5、4NF

4NF就是限制關(guān)系模式的屬性之間不允許有非平凡且非函數(shù)依賴的多值依賴。因?yàn)楦鶕?jù)定義,對(duì)于每一個(gè)非平凡的多值依賴X→→Y,X都含有候選碼,于是就有X→Y,所以4NF所允許的非平凡的多值依賴實(shí)際上是函數(shù)依賴。

這里解決幾個(gè)概念:
函數(shù)依賴簡單點(diǎn)說就是:某個(gè)屬性集決定另一個(gè)屬性集時(shí),稱另一屬性集依賴于該屬性集。

(1)數(shù)據(jù)依賴 在計(jì)算機(jī)科學(xué)中,數(shù)據(jù)依賴是指一種狀態(tài),當(dāng)程序結(jié)構(gòu)導(dǎo)致數(shù)據(jù)引用之前處理過的數(shù)據(jù)時(shí)的狀態(tài)。其中最重要的是函數(shù)依賴和多值依賴。 (2)函數(shù)依賴 設(shè)X,Y是關(guān)系R的兩個(gè)屬性集合,當(dāng)任何時(shí)刻R中的任意兩個(gè)元組中的X屬性值相同時(shí),則它們的Y屬性值也相同,則稱X函數(shù)決定Y,或Y函數(shù)依賴于X。 (3)平凡函數(shù)依賴 當(dāng)關(guān)系中屬性集合Y是屬性集合X的子集時(shí)(Y?X),存在函數(shù)依賴X→Y,即一組屬性函數(shù)決定它的所有子集,這種函數(shù)依賴稱為平凡函數(shù)依賴。 (4)非平凡函數(shù)依賴 當(dāng)關(guān)系中屬性集合Y不是屬性集合X的子集時(shí),存在函數(shù)依賴X→Y,則稱這種函數(shù)依賴為非平凡函數(shù)依賴。 (5)完全函數(shù)依賴 設(shè)X,Y是關(guān)系R的兩個(gè)屬性集合,X’是X的真子集,存在X→Y,但對(duì)每一個(gè)X’都有X’!→Y,則稱Y完全函數(shù)依賴于X。 (6)部分函數(shù)依賴 設(shè)X,Y是關(guān)系R的兩個(gè)屬性集合,存在X→Y,若X’是X的真子集,存在X’→Y,則稱Y部分函數(shù)依賴于X。 (7)傳遞函數(shù)依賴 設(shè)X,Y,Z是關(guān)系R中互不相同的屬性集合,存在X→Y(Y !→X),Y→Z,則稱Z傳遞函數(shù)依賴于X。 (8)多值依賴 設(shè)R(U)是屬性集U上的一個(gè)關(guān)系模式。X,Y,Z是U的子集,并且Z=U-X-Y。關(guān)系模式R(U)中多值依賴X→→Y成立,當(dāng)且僅當(dāng)對(duì)R(U)的任一關(guān)系r,給定的一對(duì)(x,z)值有一組Y的值,這組值僅僅決定于x值而與z值無關(guān)。 平凡的多值依賴與非平凡的多值依賴: 若X→→Y,而Z為空集,則稱X→→Y為平凡的多值依賴;若Z不為空,則稱其為非平凡的多值依賴。



 

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

數(shù)據(jù)庫設(shè)計(jì)的三大范式、BCNF、4NF

數(shù)據(jù)庫設(shè)計(jì)的三大范式、BCNF、4NF:一、理解數(shù)據(jù)庫的范式需要理解幾個(gè)基本概念: 碼:表中可以唯一確定一個(gè)元組的某個(gè)屬性(或者屬性組),如果這樣的碼有不止一個(gè),那么大家都叫候選碼,我們從候選碼中挑一個(gè)出來做老大,它就叫主碼。相當(dāng)于鍵的意思。主屬性:一個(gè)屬性只要在任何一個(gè)候選碼中
推薦度:
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top