人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動(dòng)態(tài)

數(shù)據(jù)庫(kù)建表設(shè)計(jì)六范式介紹

發(fā)布日期:2022-02-03 08:38 | 文章來源:CSDN

數(shù)據(jù)庫(kù)設(shè)計(jì)六范式

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

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

1.第一范式(1NF)無(wú)重復(fù)的列(確保每列保持原子性)

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

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

2.第二范式(2NF)屬性完全依賴于主鍵 (消除部分子函數(shù)依賴,確保表中的每列都和主鍵相關(guān))

第二范式在第一范式的基礎(chǔ)之上更進(jìn)一層。第二范式需要確保數(shù)據(jù)庫(kù)表中的每一列都和主鍵相關(guān),而不能只與主鍵的某一部分相關(guān)(主要針對(duì)聯(lián)合主鍵而言)。也就是說在一個(gè)數(shù)據(jù)庫(kù)表中,一個(gè)表中只能保存一種數(shù)據(jù),不可以把多種數(shù)據(jù)保存在同一張數(shù)據(jù)庫(kù)表中。第二范式要求數(shù)據(jù)庫(kù)表中的每個(gè)實(shí)例或行必須可以被惟一地區(qū)分。為實(shí)現(xiàn)區(qū)分通常需要為表加上一個(gè)列,以存儲(chǔ)各個(gè)實(shí)例的惟一標(biāo)識(shí)。這個(gè)惟一屬性列被稱為主關(guān)鍵字或主鍵、主碼。

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

這樣就產(chǎn)生一個(gè)問題:這個(gè)表中是以訂單編號(hào)和商品編號(hào)作為聯(lián)合主鍵。這樣在該表中商品名稱、單位、商品價(jià)格等信息不與該表的主鍵相關(guān),而僅僅是與商品編號(hào)相關(guān)。所以在這里違反了第二范式的設(shè)計(jì)原則。
不符合第二范式,會(huì)出現(xiàn)的問題:
(1) 數(shù)據(jù)冗余:同一個(gè)客戶下的訂單,所屬單位和聯(lián)系方式出現(xiàn)了冗余
(2) 更新異常:如果調(diào)整了某個(gè)商品的價(jià)格,表中所有下單該商品的價(jià)格表都需要調(diào)整,否則會(huì)出現(xiàn)同一商品價(jià)格不統(tǒng)一的情況
(3) 插入異常:如果商家新增了一個(gè)商品,由于還沒有人買過沒有訂單號(hào),導(dǎo)致表中無(wú)法插入這樣的信息信息了
(4) 刪除異常:如果客戶已完成訂單,或者客戶退貨取消訂單,就需要?jiǎng)h除訂單編號(hào),這樣又會(huì)導(dǎo)致商品信息被刪除,問題更大了。
如果把這個(gè)訂單信息表進(jìn)行拆分,把商品信息分離到另一個(gè)表中,把訂單項(xiàng)目表也分離到另一個(gè)表中,就非常完美了。

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

3.第三范式(3NF)屬性不依賴于其它非主屬性 (消除傳遞依賴,確保每列都和主鍵列直接相關(guān),而不是間接相關(guān))

第三范式需要確保數(shù)據(jù)表中的每一列數(shù)據(jù)都和主鍵直接相關(guān),而不能間接相關(guān)。數(shù)據(jù)表中如果不存在非關(guān)鍵字段對(duì)任一候選關(guān)鍵字段的傳遞函數(shù)依賴則符合第三范式。簡(jiǎn)而言之,第三范式就是屬性不依賴于其它非主屬性。所謂傳遞函數(shù)依賴,指的是如果存在"A → B → C"的決定關(guān)系,則C傳遞函數(shù)依賴于A。
因此,滿足第三范式的數(shù)據(jù)庫(kù)表應(yīng)該不存在如下依賴關(guān)系:
關(guān)鍵字段 → 非關(guān)鍵字段x → 非關(guān)鍵字段y

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

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

4、BCNF 鮑依斯-科得范式 (針對(duì)某一列與復(fù)合主鍵中的某一列有關(guān),而與其他主鍵無(wú)關(guān))

所謂BCNF,是指在第三范式的基礎(chǔ)上進(jìn)一步消除主屬性對(duì)于碼的部分函數(shù)依賴和傳遞依賴。BCNF需要符合3NF,并且,主屬性不依賴于主屬性。

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

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

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

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

(倉(cāng)庫(kù)ID) → (管理員ID)

(管理員ID) → (倉(cāng)庫(kù)ID)

即存在關(guān)鍵字段決定關(guān)鍵字段的情況,所以其不符合BCNF范式。它會(huì)出現(xiàn)如下異常情況:

(1) 刪除異常:

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

(2) 插入異常:

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

(3) 更新異常:

如果倉(cāng)庫(kù)換了管理員,則表中所有行的管理員ID都要修改。

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

倉(cāng)庫(kù)管理:StorehouseManage(倉(cāng)庫(kù)ID,管理員ID);

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

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

又如,有這樣一個(gè)配件管理表WPE(WNO,PNO,ENO,QNT),其中WNO表示倉(cāng)庫(kù)號(hào),PNO表示配件號(hào),ENO表示職工號(hào),QNT表示數(shù)量。

有以下約束要求:

(1)一個(gè)倉(cāng)庫(kù)有多名職工;

(2)一個(gè)職工僅在一個(gè)倉(cāng)庫(kù)工作;

(3)每個(gè)倉(cāng)庫(kù)里一種型號(hào)的配件由專人負(fù)責(zé),但一個(gè)人可以管理幾種配件;

(4)同一種型號(hào)的配件可以分放在幾個(gè)倉(cāng)庫(kù)中。

分析表中的函數(shù)依賴關(guān)系,可以得到:

(1)ENO->WNO;

(2)(WNO,PNO)->QNT

(3)(WNO,PNO)->ENO

(4)(ENO,PNO)->QNT

可以看到,候選鍵有:(ENO,PNO);(WNO,PNO)。所以,ENO,PNO,WNO均為主屬性,QNT為非主屬性。顯然,非主屬性是直接依賴于候選鍵的。所以此表滿足第三范式。

而我們觀察一下主屬性:(WNO,PNO)->ENO;ENO->WNO。顯然WNO對(duì)于候選鍵(WNO,PNO)存在傳遞依賴,所以不符合BCNF.

解決這個(gè)問題的辦法是分拆為兩個(gè)表:管理表EP(ENO,PNO,QNT);工作表EW(ENO,WNO)。但這樣做會(huì)導(dǎo)致函數(shù)依賴(WNO,PNO)->ENO丟失。

雖然,不滿足BCNF,也會(huì)導(dǎo)致一些冗余和一致性的問題。但是,將表分解成滿足BCNF的表又可能丟失一些函數(shù)依賴。所以,一般情況下不會(huì)強(qiáng)制要求關(guān)系表要滿足BCNF。

5、4NF(第四范式)

對(duì)于第四范式,從理論層面來講是,關(guān)系模式R∈1NF,如果對(duì)于R對(duì)于R的每個(gè)非平凡多值依賴X→→Y(Y不屬于X),X都含有候選碼,則R∈4NF。4NF就是限制關(guān)系模式的屬性之間不允許有非平凡且非函數(shù)依賴的多值依賴。顯然一個(gè)關(guān)系模式是4NF,則必為BCNF。

也就是說,當(dāng)一個(gè)表中的非主屬性互相獨(dú)立時(shí)(3NF),這些非主屬性不應(yīng)該有多值。若有多值就違反了第四范式。

有這樣一個(gè)用戶聯(lián)系方式表TELEPHONE(CUSTOMERID,PHONE,CELL)。CUSTOMERID為用戶ID,PHONE為用戶的固定電話,CELL為用戶的移動(dòng)電話。

本來,這是一個(gè)非常簡(jiǎn)單的第3范式表。主鍵為CUSTOMERID,不存在傳遞依賴。但在某些情況下,這樣的表還是不合理的。比如說,用戶有兩個(gè)固定電話,兩個(gè)移動(dòng)電話。這時(shí),表的具體表示如下:

CUSTOMERID PHONE CELL

1000 8828-1234 149088888888

1000 8838-1234 149099999999

由于PHONE和CELL是互相獨(dú)立的,而有些用戶又有兩個(gè)和多個(gè)值。這時(shí)此表就違反第四范式。

在這種情況下,此表的設(shè)計(jì)就會(huì)帶來很多維護(hù)上的麻煩。例如,如果用戶放棄第一行的固定電話和第二行的移動(dòng)電話,那么這兩行會(huì)合并嗎?等等

解決問題的方法為,設(shè)計(jì)一個(gè)新表NEW_PHONE(CUSTOMERID,NUMBER,TYPE).這樣就可以對(duì)每個(gè)用戶處理不同類型的多個(gè)電話號(hào)碼,而不會(huì)違反第四范式。

顯然,第四范式的應(yīng)用范圍比較小,因?yàn)橹挥性谀承┨厥馇闆r下,要考慮將表規(guī)范到第四范式。所以在實(shí)際應(yīng)用中,一般不要求表滿足第四范式。

6、5NF(第五范式)

第五范式(5NF):是最終范式。消除了4NF中的連接依賴。

第五范式有以下要求:

(1)必須滿足第四范式

(2)表必須可以分解為較小的表,除非那些表在邏輯上擁有與原始表相同的主鍵。

第五范式是在第四范式的基礎(chǔ)上做的進(jìn)一步規(guī)范化。第四范式處理的是相互獨(dú)立的多值情況,而第五范式則處理相互依賴的多值情況。

有一個(gè)銷售信息表SALES(SALEPERSON,VENDOR,PRODUCT)。SALEPERSON代表銷售人員,VENDOR代表供和商,PRODUCT則代表產(chǎn)品。

在某些情況下,這個(gè)表中會(huì)產(chǎn)生一些冗余??梢詫⒈矸纸鉃镻ERSON_VENDOR表(SALEPERSON,VENDOR);PERSON_PRODUCT表(SALEPERSON,PRODUCT);VENDOR-_PRODICT表(VENDOR,PRODUCT)

到此這篇關(guān)于數(shù)據(jù)庫(kù)建表設(shè)計(jì)六范式介紹的文章就介紹到這了,更多相關(guān)數(shù)據(jù)庫(kù)范式內(nèi)容請(qǐng)搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!

香港服務(wù)器租用

版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實(shí)時(shí)開通

自選配置、實(shí)時(shí)開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對(duì)1客戶咨詢顧問

在線
客服

在線客服:7*24小時(shí)在線

客服
熱線

400-630-3752
7*24小時(shí)客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部