數(shù)據(jù)庫的三大范式
1、范式的基本介紹
設(shè)計關(guān)系數(shù)據(jù)庫時,遵從不同的規(guī)范要求,設(shè)計出合理的關(guān)系型數(shù)據(jù)庫,這些不同的規(guī)范要求被稱為不同的范式,各種范式呈遞次規(guī)范,越高的范式數(shù)據(jù)庫冗余越小。目前關(guān)系數(shù)據(jù)庫有六種范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又稱完美范式)。
范式級別越高越規(guī)范,想達(dá)到高范式,必先達(dá)到低范式的要求。 一個低一級的關(guān)系模式通過模式分解可以轉(zhuǎn)化為若干個高一級范式的關(guān)系模式的集合,這個過程叫做規(guī)范化。一般達(dá)到第三范式就可以滿足要求。

2、第一范式
所謂第一范式(1NF)是指在關(guān)系模型中,數(shù)據(jù)庫表的每一列都是不可分割的原子數(shù)據(jù)項,而不能是集合,數(shù)組,記錄等非原子數(shù)據(jù)項。
屬于第一范式關(guān)系的所有屬性都不可再分,即數(shù)據(jù)項不可分。 第一范式強(qiáng)調(diào)數(shù)據(jù)表的原子性,是其他范式的基礎(chǔ)。
如下圖所示數(shù)據(jù)庫就不符合第一范式:

上表將商品這一數(shù)據(jù)項又劃分為名稱和數(shù)量兩個數(shù)據(jù)項,故不符合第一范式關(guān)系。改正之后如下圖所示:
![]()
第一范式的合理遵循需要根據(jù)系統(tǒng)的實際需求來定。比如某些數(shù)據(jù)庫系統(tǒng)中需要用到“地址”這個屬性,本來直接將“地址”屬性設(shè)計成一個數(shù)據(jù)庫表的字段就行。但是如果系統(tǒng)經(jīng)常會訪問“地址”屬性中的“城市”部分,那么就非要將“地址”這個屬性重新拆分為省份、城市、詳細(xì)地址等多個部分進(jìn)行存儲,這樣在對地址中某一部分操作的時候?qū)⒎浅7奖?。這樣設(shè)計才算滿足了數(shù)據(jù)庫的第一范式,如下表所示。

上表所示的用戶信息遵循了第一范式的要求,這樣在對用戶使用城市進(jìn)行分類的時候就非常方便,也提高了數(shù)據(jù)庫的性能。
2.1、第一范式存在的問題
僅用第一范式來規(guī)范表格是遠(yuǎn)遠(yuǎn)不夠的,仍然會存在以下問題:
- 數(shù)據(jù)冗余
- 數(shù)據(jù)添加異常:存在刪除異常、插入異常、修改異常的問題。
3、第二范式(消除了部分函數(shù)依賴)
第二范式的概念:在1NF的基礎(chǔ)上,非碼屬性必須完全依賴于候選碼(在1NF基礎(chǔ)上消除非主屬性對主碼的部分函數(shù)依賴)。
第二范式需要確保數(shù)據(jù)庫表中的每一列都和主鍵相關(guān),而不能只與主鍵的某一部分相關(guān)(主要針對聯(lián)合主鍵而言)。如果滿足第一范式,并且主鍵只有一個屬性的那就一定是第二范式,因為如果主鍵只有一個屬性值那就意味著已經(jīng)消除了部分函數(shù)依賴。

比如:一個表中有學(xué)號、課程號、成績、學(xué)分,學(xué)號+課程號組成主鍵,成績完全依賴主鍵,而學(xué)分部分依賴主鍵,因為課程號就能確定學(xué)分,所以不符合第二范式。
3.1、第二范式存在的問題
第二范式仍會存在數(shù)據(jù)更新異常、插入異常、刪除異常的問題。
4、第三范式(在第二范式基礎(chǔ)上消除了傳遞函數(shù)依賴)
滿足第二范式,并且每個非主屬性必須直接依賴于主鍵,而非通過其他非主屬性間接依賴 ,就是第三范式。第三范式在第二范式的基礎(chǔ)上消除了傳遞依賴。
比如:學(xué)號、姓名、系號、系名、系樓層,學(xué)號是主鍵,此時就不滿足第三范式,因為學(xué)號確定系號,系號又確定系名、系樓層,此時存在傳遞依賴。也就是非主屬性全部都是直接依賴于主鍵,而不是間接依賴于主鍵。
- 傳遞依賴:A->B,B->C,則C依賴于A
- 消除傳遞依賴:需要將傳遞依賴的屬性分離到其他表中,如上述的C
滿足第三范式的表可以解決數(shù)據(jù)冗余、更新異常、插入異常、刪除異常的問題。
5、BCNF(BC范式)

也就是說把所有的依賴集都列出來,而左邊的部分必定是候選鍵的就滿足BC范式。
例題:

候選鍵有SJ和TJ,所有的依賴集有:SJ -> T,T -> J,而依賴集所有的左邊部分SJ是候選鍵,但T不是候選鍵,所以不滿足BC范式。

浙公網(wǎng)安備 33010602011771號