新聞中心
作者:鄭龍飛
范式定義
百度百科:設(shè)計(jì)關(guān)系數(shù)據(jù)庫時(shí),遵從不同的規(guī)范要求,設(shè)計(jì)出合理的關(guān)系型數(shù)據(jù)庫,這些不同的規(guī)范要求被稱為不同的范式,各種范式呈遞次規(guī)范,越高的范式數(shù)據(jù)庫冗余越小。

成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),海拉爾企業(yè)網(wǎng)站建設(shè),海拉爾品牌網(wǎng)站建設(shè),網(wǎng)站定制,海拉爾網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,海拉爾網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
人類語言: 范式可以理解為設(shè)計(jì)一張數(shù)據(jù)表的表結(jié)構(gòu),符合的標(biāo)準(zhǔn)級(jí)別、規(guī)范和要求。
而通常我們用的最多的就是第一范式(1NF)、第二范式(2NF)、第三范式(3NF),也就是本文要講的“三大范式”。
范式的優(yōu)點(diǎn)
采用范式可以降低數(shù)據(jù)的冗余性。
為什么要降低數(shù)據(jù)的冗余性?
- 十幾年前,磁盤很貴,為了減少磁盤存儲(chǔ)。
- 以前沒有分布式系統(tǒng),都是單機(jī),只能增加磁盤,磁盤個(gè)數(shù)也是有限的。
- 一次修改,需要修改多個(gè)表,很難保證數(shù)據(jù)一致性。
范式的缺點(diǎn)
范式的缺點(diǎn)是獲取數(shù)據(jù)時(shí),需要通過Join拼接出最后的數(shù)據(jù)。
目前范式的分類
目前業(yè)界范式有:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)、第五范式(5NF)。
什么是函數(shù)依賴?
百度百科:函數(shù)依賴簡單點(diǎn)說就是:某個(gè)屬性集決定另一個(gè)屬性集時(shí),稱另一屬性集依賴于該屬性集。
人類語言:以下面表格為例,通俗易懂的解釋,什么是函數(shù)依賴。
|
學(xué)號(hào) |
姓名 |
系名 |
系主任 |
科名 |
分?jǐn)?shù) |
|
001 |
張三 |
計(jì)算機(jī)系 |
李雷 |
高等數(shù)學(xué) |
87 |
|
001 |
張三 |
計(jì)算機(jī)系 |
李雷 |
大學(xué)英語 |
88 |
|
001 |
張三 |
計(jì)算機(jī)系 |
李雷 |
數(shù)據(jù)庫設(shè)計(jì) |
89 |
|
002 |
李四 |
計(jì)算機(jī)系 |
李雷 |
高等數(shù)學(xué) |
86 |
|
002 |
李四 |
計(jì)算機(jī)系 |
李雷 |
java程序設(shè)計(jì) |
90 |
|
002 |
李四 |
計(jì)算機(jī)系 |
李雷 |
大學(xué)英語 |
98 |
|
003 |
王五 |
財(cái)務(wù)系 |
韓梅梅 |
高等數(shù)學(xué) |
96 |
|
003 |
王五 |
財(cái)務(wù)系 |
韓梅梅 |
財(cái)務(wù)基礎(chǔ) |
95 |
完全函數(shù)依賴
官方定義:設(shè)X,Y是關(guān)系R的兩個(gè)屬性集合,X’是X的真子集,存在X→Y,但對每一個(gè)X’都有X’!→Y,則稱Y完全函數(shù)依賴于X。
人類語言:比如通過,(學(xué)號(hào),課程) 推出分?jǐn)?shù) ,但是單獨(dú)用學(xué)號(hào)推斷不出來分?jǐn)?shù),那么就可以說:分?jǐn)?shù) 完全依賴于(學(xué)號(hào),課程) 。
總結(jié):即:通過A B能得出C,但 是A B單獨(dú)得不出C,那么說C完全依賴于AB。
部分函數(shù)依賴
官方定義:假如 Y函數(shù)依賴于 X,但同時(shí) Y 并不完全函數(shù)依賴于 X,那么我們就稱 Y 部分函數(shù)依賴于 X。
人類語言:比如通過,(學(xué) 號(hào),課程) 推出姓名,因?yàn)槠鋵?shí)直接可以通過,學(xué)號(hào)推出姓名,所以:姓名 部分依賴于 (學(xué)號(hào),課程)。
總結(jié):通過AB能得出C,通過A也能得出C,或者通過B也能得出C,那么說C部分依賴于AB。
傳遞函數(shù)依賴
官方定義:傳遞函數(shù)依賴:設(shè)X,Y,Z是關(guān)系R中互不相同的屬性集合,存在X→Y(Y !→X),Y→Z,則稱Z傳遞函數(shù)依賴于X。
人類語言:比如:學(xué)號(hào) 推出 系名 , 系名 推出 系主任, 但是,系主任推不出學(xué)號(hào),系主任主要依賴于系名。這種情況可以說:系主任 傳遞依賴于 學(xué)號(hào) 。
總結(jié):即:通 過A得 到B,通 過B得 到C,但 是C得不到A,那 么說C傳遞依賴于A。
三范式的區(qū)別
第一范式
第一范式1NF核心原則:屬性不可切割。
舉例說明:
|
學(xué)號(hào) |
姓名 |
系名 |
系主任 |
科名 |
分?jǐn)?shù) |
學(xué)籍信息 |
|
001 |
張三 |
計(jì)算機(jī)系 |
李雷 |
高等數(shù)學(xué) |
87 |
本科,大二 |
|
002 |
李四 |
計(jì)算機(jī)系 |
李雷 |
大學(xué)英語 |
88 |
研究生,研三 |
很明顯上面表格設(shè)計(jì)是不符合第一范式的,學(xué)籍信息列中的數(shù)據(jù)不是原子數(shù)據(jù)項(xiàng),是可以進(jìn)行分割的,因此對表格進(jìn)行修改,讓表格符合第一范式的要求,修改結(jié)果如下圖所示:
|
學(xué)號(hào) |
姓名 |
系名 |
系主任 |
科名 |
分?jǐn)?shù) |
學(xué)歷 |
所在年級(jí) |
|
001 |
張三 |
計(jì)算機(jī)系 |
李雷 |
高等數(shù)學(xué) |
87 |
本科 |
大二 |
|
002 |
李四 |
計(jì)算機(jī)系 |
李雷 |
大學(xué)英語 |
88 |
研究生 |
研三 |
實(shí)際上 ,1NF是所有關(guān)系型數(shù)據(jù)庫的最基本要求 ,你在關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS),例如SQL Server,Oracle,MySQL中創(chuàng)建數(shù)據(jù)表的時(shí)候,如果數(shù)據(jù)表的設(shè)計(jì)不符合這個(gè)最基本的要求,那么操作一定是不能成功的。也就是說,只要在RDBMS中已經(jīng)存在
的數(shù)據(jù)表,一定是符合1NF的。
第二范式
第二范式2NF核心原則:不能存在“部分函數(shù)依賴”。
舉例說明:
|
學(xué)號(hào) |
姓名 |
系名 |
系主任 |
科名 |
分?jǐn)?shù) |
|
001 |
張三 |
計(jì)算機(jī)系 |
李雷 |
高等數(shù)學(xué) |
87 |
|
001 |
張三 |
計(jì)算機(jī)系 |
李雷 |
大學(xué)英語 |
88 |
|
001 |
張三 |
計(jì)算機(jī)系 |
李雷 |
數(shù)據(jù)庫設(shè)計(jì) |
89 |
|
002 |
李四 |
計(jì)算機(jī)系 |
李雷 |
高等數(shù)學(xué) |
86 |
|
002 |
李四 |
計(jì)算機(jī)系 |
李雷 |
java程序設(shè)計(jì) |
90 |
|
002 |
李四 |
計(jì)算機(jī)系 |
李雷 |
大學(xué)英語 |
98 |
|
003 |
王五 |
財(cái)務(wù)系 |
韓梅梅 |
高等數(shù)學(xué) |
96 |
|
003 |
王五 |
財(cái)務(wù)系 |
韓梅梅 |
財(cái)務(wù)基礎(chǔ) |
95 |
以上表格明顯存在,部分依賴。比 如,這張表的主鍵是 (學(xué)號(hào),課名),分?jǐn)?shù)確實(shí)完全依賴于(學(xué)號(hào),課名),但是姓名并不完全依賴于(學(xué)號(hào),課名),讓表格符合第二范式的要求,修改結(jié)果如下圖所示:
|
學(xué)號(hào) |
科名 |
分?jǐn)?shù) |
|
001 |
高等數(shù)學(xué) |
87 |
|
001 |
大學(xué)英語 |
88 |
|
001 |
數(shù)據(jù)庫設(shè)計(jì) |
89 |
|
002 |
高等數(shù)學(xué) |
86 |
|
002 |
java程序設(shè)計(jì) |
90 |
|
002 |
大學(xué)英語 |
98 |
|
003 |
高等數(shù)學(xué) |
96 |
|
003 |
財(cái)務(wù)基礎(chǔ) |
95 |
|
學(xué)號(hào) |
姓名 |
系名 |
系主任 |
|
001 |
張三 |
計(jì)算機(jī)系 |
李雷 |
|
002 |
李四 |
計(jì)算機(jī)系 |
李雷 |
|
003 |
王五 |
財(cái)務(wù)系 |
韓梅梅 |
以上符合第二范式,去掉部分函數(shù)依賴依賴。
第三范式
第三范式 3NF核心原則:不能存在傳遞函數(shù)依賴。
舉例說明:
|
學(xué)號(hào) |
姓名 |
系名 |
系主任 |
|
001 |
張三 |
計(jì)算機(jī)系 |
李雷 |
|
002 |
李四 |
計(jì)算機(jī)系 |
李雷 |
|
003 |
王五 |
財(cái)務(wù)系 |
韓梅梅 |
在上面這張表中,存 在傳遞函數(shù)依賴:學(xué)號(hào)->系 名->系主任,但是系主任推不出學(xué)號(hào)。
上面表需要再次拆解:
|
學(xué)號(hào) |
姓名 |
系名 |
|
001 |
張三 |
計(jì)算機(jī)系 |
|
002 |
李四 |
計(jì)算機(jī)系 |
|
003 |
王五 |
財(cái)務(wù)系 |
|
系名 |
系主任 |
|
計(jì)算機(jī)系 |
李雷 |
|
計(jì)算機(jī)系 |
李雷 |
|
財(cái)務(wù)系 |
韓梅梅 |
反三范式
沒有冗余的數(shù)據(jù)庫未必是最好的數(shù)據(jù)庫,有時(shí)為了提高運(yùn)行效率,就必須降低范式標(biāo)準(zhǔn),適當(dāng)保留冗余數(shù)據(jù)。具體做法是: 在概念數(shù)據(jù)模型設(shè)計(jì)時(shí)遵守第三范式,降低范式標(biāo)準(zhǔn)的工作放到物理數(shù)據(jù)模型設(shè)計(jì)時(shí)考慮。降低范式就是增加字段,減少了查詢時(shí)的關(guān)聯(lián),提高查詢效率,因?yàn)樵跀?shù)據(jù)庫的操作中查詢的比例要遠(yuǎn)遠(yuǎn)大于DML的比例。但是反范式化一定要適度,并且在原本已滿足三范式的基礎(chǔ)上再做調(diào)整的。
總結(jié)
引用知乎大佬對范式的理解:
數(shù)據(jù)庫設(shè)計(jì)應(yīng)該也是分為三個(gè)境界的:
第一個(gè)境界,剛?cè)腴T數(shù)據(jù)庫設(shè)計(jì),范式的重要性還未深刻理解。這時(shí)候出現(xiàn)的反范式設(shè)計(jì),一般會(huì)出問題。
第二個(gè)境界,隨著遇到問題解決問題,漸漸了解到范式的真正好處,從而能快速設(shè)計(jì)出低冗余、高效率的數(shù)據(jù)庫。
第三個(gè)境界,再經(jīng)過N年的鍛煉,是一定會(huì)發(fā)覺范式的局限性的。此時(shí)再去打破范式,設(shè)計(jì)更合理的反范式部分。
網(wǎng)頁名稱:關(guān)系型數(shù)據(jù)庫設(shè)計(jì)三大范式
分享URL:http://www.dlmjj.cn/article/dpgihed.html


咨詢
建站咨詢
