一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

數(shù)據(jù)庫的四個(gè)范式之間的區(qū)別

 正則室 2017-11-27


第一范式(1NF):屬性不可拆分 或 無重復(fù)的列

這個(gè)簡(jiǎn)單,就是一個(gè)屬性不允許再分成多個(gè)屬性來建立列。事實(shí)上,在目前的DBMS中是不可能拆分屬性的,因?yàn)樗麄儾辉试S這么做。

2. 第二范式(2NF):完全函數(shù)依賴

先講講什么是部分函數(shù)依賴。

部分函數(shù)依賴,就是多個(gè)屬性決定另一個(gè)屬性,但事實(shí)上,這多個(gè)屬性是有冗余的。例如,(學(xué)號(hào),班級(jí))->姓名,事實(shí)上,只需要學(xué)號(hào)就能決定姓名,因此班級(jí)是冗余的,應(yīng)該去掉。

滿足第二范式的數(shù)據(jù)庫設(shè)計(jì)必須先滿足第一范式。

因此第二范式的目標(biāo)就是消除函數(shù)依賴關(guān)系中左邊存在的冗余屬性。

3.第三范式(3NF):消除傳遞依賴

不依賴于其他非主屬性(消除傳遞依賴)。

滿足第三范式的數(shù)據(jù)庫必須先滿足第二范式。

也就是,數(shù)據(jù)庫中的屬性依賴僅能依賴于主屬性,不存在于其他非主屬性的關(guān)聯(lián)。

例如,圖書,圖書室的關(guān)系。圖書包括編號(hào)、出版商、頁碼等信息,圖書室包括圖書室編號(hào)、所存圖書(外鍵)。其中,圖書室的表中不應(yīng)該存儲(chǔ)任何圖書的具體信息(例如,出版商。。),而只能通過主鍵圖書編號(hào)來獲得對(duì)應(yīng)圖書的信息。

4.BC范式(BCNF):

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

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

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

R屬于3NF,不一定屬于BCNF,如果R屬于BCNF,一定屬于3NF。

5.第四范式(4NF):

對(duì)于每一個(gè)X->Y,X都能找到一個(gè)候選碼( 若關(guān)系中的某一屬性組的值能唯一地表示一個(gè)元組,而其真子集不行,則稱該屬性組為候選碼)。

最后舉個(gè)例子(網(wǎng)上的):

學(xué)生表
學(xué)號(hào)
姓名
教師學(xué)生關(guān)系編號(hào)
系編號(hào)
愛好編號(hào)
一范式,就是表里的字段不能在劃分屬性了。
二范式,滿足一范式基礎(chǔ),表里不存在與學(xué)號(hào)沒關(guān)系的信息
三范式,滿足二范式的基礎(chǔ)上,表里不存在其他字段的關(guān)聯(lián),
BC范式,滿足三范式的基礎(chǔ)上,就是學(xué)生表里的每行都不存在重復(fù)的信息
第四范式,滿足BC范式,就是連愛好這樣字段,也不能出現(xiàn) ”籃球,足球“;要建立一個(gè)愛好編號(hào)表,

數(shù)據(jù)庫三大范式詳解(通俗易懂)

轉(zhuǎn)載 2016年10月26日 20:03:29
范式:英文名稱是 Normal Form,它是英國(guó)人 E.F.Codd(關(guān)系數(shù)據(jù)庫的老祖宗)在上個(gè)世紀(jì)70年代提出關(guān)系數(shù)據(jù)庫模型后總結(jié)出來的,范式是關(guān)系數(shù)據(jù)庫理論的基礎(chǔ),也是我們?cè)谠O(shè)計(jì)數(shù)據(jù)庫結(jié)構(gòu)過程中所要遵循的規(guī)則和指導(dǎo)方法。目前有跡可尋的共有8種范式,依次是:1NF,2NF,3NF,BCNF,4NF,5NF,DKNF,6NF。通常所用到的只是前三個(gè)范式,即:第一范式(1NF),第二范式(2NF),第三范式(3NF)。下面就簡(jiǎn)單介紹下這三個(gè)范式。
◆ 第一范式(1NF):強(qiáng)調(diào)的是列的原子性,即列不能夠再分成其他幾列。 
考慮這樣一個(gè)表:【聯(lián)系人】(姓名,性別,電話) 
如果在實(shí)際場(chǎng)景中,一個(gè)聯(lián)系人有家庭電話和公司電話,那么這種表結(jié)構(gòu)設(shè)計(jì)就沒有達(dá)到 1NF。要符合 1NF 我們只需把列(電話)拆分,即:【聯(lián)系人】(姓名,性別,家庭電話,公司電話)。1NF 很好辨別,但是 2NF 和 3NF 就容易搞混淆。
◆ 第二范式(2NF):首先是 1NF,另外包含兩部分內(nèi)容,一是表必須有一個(gè)主鍵;二是沒有包含在主鍵中的列必須完全依賴于主鍵,而不能只依賴于主鍵的一部分。 
考慮一個(gè)訂單明細(xì)表:【OrderDetail】(OrderID,ProductID,UnitPrice,Discount,Quantity,ProductName)。
因?yàn)槲覀冎涝谝粋€(gè)訂單中可以訂購多種產(chǎn)品,所以單單一個(gè) OrderID 是不足以成為主鍵的,主鍵應(yīng)該是(OrderID,ProductID)。顯而易見 Discount(折扣),Quantity(數(shù)量)完全依賴(取決)于主鍵(OderID,ProductID),而 UnitPrice,ProductName 只依賴于 ProductID。所以 OrderDetail 表不符合 2NF。不符合 2NF 的設(shè)計(jì)容易產(chǎn)生冗余數(shù)據(jù)。
可以把【OrderDetail】表拆分為【OrderDetail】(OrderID,ProductID,Discount,Quantity)和【Product】(ProductID,UnitPrice,ProductName)來消除原訂單表中UnitPrice,ProductName多次重復(fù)的情況。
◆ 第三范式(3NF):首先是 2NF,另外非主鍵列必須直接依賴于主鍵,不能存在傳遞依賴。即不能存在:非主鍵列 A 依賴于非主鍵列 B,非主鍵列 B 依賴于主鍵的情況。
考慮一個(gè)訂單表【Order】(OrderID,OrderDate,CustomerID,CustomerName,CustomerAddr,CustomerCity)主鍵是(OrderID)。
其中 OrderDate,CustomerID,CustomerName,CustomerAddr,CustomerCity 等非主鍵列都完全依賴于主鍵(OrderID),所以符合 2NF。不過問題是 CustomerName,CustomerAddr,CustomerCity 直接依賴的是 CustomerID(非主鍵列),而不是直接依賴于主鍵,它是通過傳遞才依賴于主鍵,所以不符合 3NF。
通過拆分【Order】為【Order】(OrderID,OrderDate,CustomerID)和【Customer】(CustomerID,CustomerName,CustomerAddr,CustomerCity)從而達(dá)到 3NF。

第二范式(2NF)和第三范式(3NF)的概念很容易混淆,區(qū)分它們的關(guān)鍵點(diǎn)在于,2NF:非主鍵列是否完全依賴于主鍵,還是依賴于主鍵的一部分;3NF:非主鍵列是直接依賴于主鍵,還是直接依賴于非主鍵列。


標(biāo)簽: 數(shù)據(jù)庫范式
2014-02-25 12:20 5393人閱讀 評(píng)論(2) 收藏 舉報(bào)
 分類:

數(shù)據(jù)庫的設(shè)計(jì)范式是數(shù)據(jù)庫設(shè)計(jì)所需要滿足的規(guī)范,滿足這些規(guī)范的數(shù)據(jù)庫是簡(jiǎn)潔的、結(jié)構(gòu)明晰的,同時(shí),不會(huì)發(fā)生插入(insert)、刪除(delete)和更新(update)操作異常。反之則是亂七八糟,不僅給數(shù)據(jù)庫的編程人員制造麻煩,而且面目可憎,可能存儲(chǔ)了大量不需要的冗余信息。

 

范式說明

 

1.1 第一范式(1NF)無重復(fù)的列

 

    所謂第一范式(1NF)是指數(shù)據(jù)庫表的每一列都是不可分割的基本數(shù)據(jù)項(xiàng),同一列中不能有多個(gè)值,即實(shí)體中的某個(gè)屬性不能有多個(gè)值或者不能有重復(fù)的屬性。如果出現(xiàn)重復(fù)的屬性,就可能需要定義一個(gè)新的實(shí)體,新的實(shí)體由重復(fù)的屬性構(gòu)成,新實(shí)體與原實(shí)體之間為一對(duì)多關(guān)系。在第一范式(1NF)中表的每一行只包含一個(gè)實(shí)例的信息。簡(jiǎn)而言之,第一范式就是無重復(fù)的列。

 

說明:在任何一個(gè)關(guān)系數(shù)據(jù)庫中,第一范式(1NF)是對(duì)關(guān)系模式的基本要求,不滿足第一范式(1NF)的數(shù)據(jù)庫就不是關(guān)系數(shù)據(jù)庫。

 

例如,如下的數(shù)據(jù)庫表是符合第一范式的:

 

 

字段1

字段2

字段3

字段4

 

而這樣的數(shù)據(jù)庫表是不符合第一范式的:

 

 

字段1

字段2

字段3

字段4

 

 

字段3.1

字段3.2

 

     

 

數(shù)據(jù)庫表中的字段都是單一屬性的,不可再分。這個(gè)單一屬性由基本類型構(gòu)成,包括整型、實(shí)數(shù)、字符型、邏輯型、日期型等。很顯然,在當(dāng)前的任何關(guān)系數(shù)據(jù)庫管理系統(tǒng)(DBMS)中,傻瓜也不可能做出不符合第一范式的數(shù)據(jù)庫,因?yàn)檫@些DBMS不允許你把數(shù)據(jù)庫表的一列再分成二列或多列。因此,你想在現(xiàn)有的DBMS中設(shè)計(jì)出不符合第一范式的數(shù)據(jù)庫都是不可能的。

 

1.2 第二范式(2NF)屬性完全依賴于主鍵 [ 消除部分子函數(shù)依賴 ]

 

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

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

 

例如員工信息表中加上了員工編號(hào)(emp_id)列,因?yàn)槊總€(gè)員工的員工編號(hào)是惟一的,因此每個(gè)員工可以被惟一區(qū)分。

簡(jiǎn)而言之,第二范式(2NF)就是非主屬性完全依賴于主關(guān)鍵字。

 

所謂完全依賴是指不能存在僅依賴主關(guān)鍵字一部分的屬性(設(shè)有函數(shù)依賴W→A,若存在XW,有X→A成立,那么稱W→A是局部依賴,否則就稱W→A是完全函數(shù)依賴)。如果存在,那么這個(gè)屬性和主關(guān)鍵字的這一部分應(yīng)該分離出來形成一個(gè)新的實(shí)體,新實(shí)體與原實(shí)體之間是一對(duì)多的關(guān)系。

 

假定選課關(guān)系表為SelectCourse(學(xué)號(hào), 姓名, 年齡, 課程名稱, 成績(jī), 學(xué)分),關(guān)鍵字為組合關(guān)鍵字(學(xué)號(hào), 課程名稱),因?yàn)榇嬖谌缦聸Q定關(guān)系:

 

(學(xué)號(hào), 課程名稱) → (姓名, 年齡, 成績(jī), 學(xué)分)

 

這個(gè)數(shù)據(jù)庫表不滿足第二范式,因?yàn)榇嬖谌缦聸Q定關(guān)系:

 

(課程名稱) → (學(xué)分)

 

(學(xué)號(hào)) → (姓名, 年齡)

 

即存在組合關(guān)鍵字中的字段決定非關(guān)鍵字的情況。

 

由于不符合2NF,這個(gè)選課關(guān)系表會(huì)存在如下問題:

 

(1) 數(shù)據(jù)冗余:

 

同一門課程由n個(gè)學(xué)生選修,"學(xué)分"就重復(fù)n-1次;同一個(gè)學(xué)生選修了m門課程,姓名和年齡就重復(fù)了m-1次。

 

(2) 更新異常:

 

若調(diào)整了某門課程的學(xué)分,數(shù)據(jù)表中所有行的"學(xué)分"值都要更新,否則會(huì)出現(xiàn)同一門課程學(xué)分不同的情況。

 

(3) 插入異常:

 

假設(shè)要開設(shè)一門新的課程,暫時(shí)還沒有人選修。這樣,由于還沒有"學(xué)號(hào)"關(guān)鍵字,課程名稱和學(xué)分也無法記錄入數(shù)據(jù)庫。

 

(4) 刪除異常:

 

假設(shè)一批學(xué)生已經(jīng)完成課程的選修,這些選修記錄就應(yīng)該從數(shù)據(jù)庫表中刪除。但是,與此同時(shí),課程名稱和學(xué)分信息也被刪除了。很顯然,這也會(huì)導(dǎo)致插入異常。

 

把選課關(guān)系表SelectCourse改為如下三個(gè)表:

 

學(xué)生:Student(學(xué)號(hào), 姓名, 年齡);

 

課程:Course(課程名稱, 學(xué)分);

 

選課關(guān)系:SelectCourse(學(xué)號(hào), 課程名稱, 成績(jī))。

 

這樣的數(shù)據(jù)庫表是符合第二范式的, 消除了數(shù)據(jù)冗余、更新異常、插入異常和刪除異常。

 

另外,所有單關(guān)鍵字的數(shù)據(jù)庫表都符合第二范式,因?yàn)椴豢赡艽嬖诮M合關(guān)鍵字。

 

1.3 第三范式(3NF)屬性不依賴于其它非主屬性 [ 消除傳遞依賴 ]

 

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

    滿足第三范式(3NF)必須先滿足第二范式(2NF)。第三范式(3NF)要求一個(gè)數(shù)據(jù)庫表中不包含已在其它表中已包含的非主關(guān)鍵字信息。

 

例如,存在一個(gè)部門信息表,其中每個(gè)部門有部門編號(hào)(dept_id)、部門名稱、部門簡(jiǎn)介等信息。那么在的員工信息表中列出部門編號(hào)后就不能再將部門名稱、部門簡(jiǎn)介等與部門有關(guān)的信息再加入員工信息表中。如果不存在部門信息表,則根據(jù)第三范式(3NF)也應(yīng)該構(gòu)建它,否則就會(huì)有大量的數(shù)據(jù)冗余。

 

第三范式(3NF):在第二范式的基礎(chǔ)上,數(shù)據(jù)表中如果不存在非關(guān)鍵字段對(duì)任一候選關(guān)鍵字段的傳遞函數(shù)依賴則符合第三范式。簡(jiǎn)而言之,第三范式就是屬性不依賴于其它非主屬性。

 

所謂傳遞函數(shù)依賴,指的是如果存在"A → B → C"的決定關(guān)系,則C傳遞函數(shù)依賴于A。

 

因此,滿足第三范式的數(shù)據(jù)庫表應(yīng)該不存在如下依賴關(guān)系:

 

關(guān)鍵字段 → 非關(guān)鍵字段x → 非關(guān)鍵字段y

 

假定學(xué)生關(guān)系表為Student(學(xué)號(hào), 姓名, 年齡, 所在學(xué)院, 學(xué)院地點(diǎn), 學(xué)院電話),關(guān)鍵字為單一關(guān)鍵字"學(xué)號(hào)",因?yàn)榇嬖谌缦聸Q定關(guān)系:

 

(學(xué)號(hào)) → (姓名, 年齡, 所在學(xué)院, 學(xué)院地點(diǎn), 學(xué)院電話)

 

這個(gè)數(shù)據(jù)庫是符合2NF的,但是不符合3NF,因?yàn)榇嬖谌缦聸Q定關(guān)系:

 

(學(xué)號(hào)) → (所在學(xué)院) → (學(xué)院地點(diǎn), 學(xué)院電話)

 

即存在非關(guān)鍵字段"學(xué)院地點(diǎn)"、"學(xué)院電話"對(duì)關(guān)鍵字段"學(xué)號(hào)"的傳遞函數(shù)依賴。

 

它也會(huì)存在數(shù)據(jù)冗余、更新異常、插入異常和刪除異常的情況,讀者可自行分析得知。

 

把學(xué)生關(guān)系表分為如下兩個(gè)表:

 

學(xué)生:(學(xué)號(hào), 姓名, 年齡, 所在學(xué)院);

 

學(xué)院:(學(xué)院, 地點(diǎn), 電話)。

 

這樣的數(shù)據(jù)庫表是符合第三范式的,消除了數(shù)據(jù)冗余、更新異常、插入異常和刪除異常。

 

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

 

若關(guān)系模式R是第一范式,且每個(gè)屬性都不傳遞依賴于R的候選鍵。這種關(guān)系模式就是BCNF模式。即在第三范式的基礎(chǔ)上,數(shù)據(jù)庫表中如果不存在任何字段對(duì)任一候選關(guān)鍵字段的傳遞函數(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范式。它會(huì)出現(xiàn)如下異常情況:

 

(1) 刪除異常:

 

當(dāng)倉庫被清空后,所有"存儲(chǔ)物品ID"和"數(shù)量"信息被刪除的同時(shí),"倉庫ID"和"管理員ID"信息也被刪除了。

 

(2) 插入異常:

 

當(dāng)倉庫沒有存儲(chǔ)任何物品時(shí),無法給倉庫分配管理員。

 

(3) 更新異常:

 

如果倉庫換了管理員,則表中所有行的管理員ID都要修改。

 

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

 

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

 

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

 

這樣的數(shù)據(jù)庫表是符合BCNF范式的,消除了刪除異常、插入異常和更新異常。

 

四種范式之間存在如下關(guān)系:

 

       
 
                     



    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    日本精品视频一二三区| 福利新区一区二区人口| 欧美加勒比一区二区三区| 中文文精品字幕一区二区| 日本久久精品在线观看| 九九久久精品久久久精品| 一区二区三区欧美高清| 香蕉久久夜色精品国产尤物| 亚洲成人久久精品国产| 出差被公高潮久久中文字幕| 日韩欧美91在线视频| 久久国产精品亚州精品毛片| 亚洲天堂男人在线观看| 好吊色欧美一区二区三区顽频| 日韩国产传媒在线精品| 国产午夜福利在线免费观看| 日韩人妻精品免费一区二区三区| 樱井知香黑人一区二区| 很黄很污在线免费观看| 中文字幕日韩精品人一妻| 亚洲精品福利入口在线| 欧美国产日韩在线综合| 欧美亚洲91在线视频| 午夜国产精品福利在线观看| 国产精品一区欧美二区| 亚洲欧美一二区日韩高清在线 | 小黄片大全欧美一区二区| 在线免费观看黄色美女| 日韩日韩日韩日韩在线| 色老汉在线视频免费亚欧| 欧美国产亚洲一区二区三区| 国产人妻熟女高跟丝袜| 久久99爱爱视频视频| 中文字幕一区二区熟女| 国产性情片一区二区三区| 亚洲欧美日韩在线看片| 一本久道久久综合中文字幕| 中文字幕人妻一区二区免费| 亚洲国产四季欧美一区| 国产精品一区二区高潮| 少妇毛片一区二区三区|