數(shù)據(jù)庫設(shè)計(jì)三大范式
共 2322字,需瀏覽 5分鐘
·
2024-07-23 16:41
目錄
1 數(shù)據(jù)庫范式
1.1 為什么要范式
1.2 如何是合理數(shù)據(jù)庫
1.3 如何才能保證數(shù)據(jù)庫設(shè)計(jì)水平
1.4 什么是范式(NF= NormalForm)
1.5 范式的分類
2 各個(gè)范式詳解
2.3.1 第三范式定義
2.2.1 第二范式定義
2.2.2 第二范式示例
2.1.1 第一范式定義
2.1.2 第一范式示例
2.1 第一范式
2.2 第二范式
2.3 第三范式
2.4 范式優(yōu)缺點(diǎn)
2.5 數(shù)據(jù)庫表之間關(guān)系
2.6 三大范式總結(jié)
1 數(shù)據(jù)庫范式
1.1 為什么要范式
為什么需要數(shù)據(jù)庫范式呢,因?yàn)楸仨毐WC數(shù)據(jù)庫設(shè)計(jì)的合理性
數(shù)據(jù)庫設(shè)計(jì)關(guān)系整個(gè)系統(tǒng)的架構(gòu),關(guān)系到后續(xù)的開發(fā)效率和運(yùn)行效率
數(shù)據(jù)庫的設(shè)計(jì)主要包含了設(shè)計(jì)表結(jié)構(gòu)和表之間的聯(lián)系
1.2 如何是合理數(shù)據(jù)庫
如何是合理數(shù)據(jù)庫
結(jié)構(gòu)合理
冗余較小
盡量避免插入刪除修改異常
1.3 如何才能保證數(shù)據(jù)庫設(shè)計(jì)水平
如何才能保證數(shù)據(jù)庫設(shè)計(jì)水平
遵循一定的規(guī)則
在關(guān)系型數(shù)據(jù)庫中這種規(guī)則就稱為范式
1.4 什么是范式(NF= NormalForm)
什么是范式(NF= NormalForm)
范式是符合某一種設(shè)計(jì)要求的總結(jié)
要想設(shè)計(jì)一個(gè)結(jié)構(gòu)合理的關(guān)系型數(shù)據(jù)庫,必須滿足一定的范式
1.5 范式的分類
第一范式
第二范式
第三范式Boyce Codd范式=NCNF,由Boyce和Codd提出的,比3NF又進(jìn)了一步,通常認(rèn)為是修正的第三范式.
第四范式
第五范式
各個(gè)范式是依次嵌套包含的,范式越高,設(shè)計(jì)質(zhì)量越高,在現(xiàn)實(shí)設(shè)計(jì)中也越難實(shí)現(xiàn)
一般數(shù)據(jù)庫設(shè)計(jì),只要達(dá)到第三范式,即可避免異常的出現(xiàn)
2 各個(gè)范式詳解
2.1 第一范式
2.1.1 第一范式定義
要求:最基本的范式
數(shù)據(jù)庫表每一列都是不可分割的基本數(shù)據(jù)項(xiàng),同一列中不能有多個(gè)值
簡單說就是要確保每列保持原子性
第一范式的合理遵循需要根據(jù)系統(tǒng)的實(shí)際需求來定
2.1.2 第一范式示例
示例:用戶表(用戶名,家庭地址)就不合理
用戶表(用戶名,省,城市,詳細(xì)地址)很合理
系(系名稱,系主任,系高級職稱人數(shù))不合理
系(系名稱,系主任,系教授人數(shù),系副教授人數(shù))合理
2.2 第二范式
2.2.1 第二范式定義
要求:第二范式需要確保數(shù)據(jù)庫表中的每一列都和主鍵相關(guān),而不能只與主鍵的某一部分相關(guān)(主要針對聯(lián)合主鍵而言)
即在一個(gè)數(shù)據(jù)庫表中只能保存一種數(shù)據(jù),不可以把多種數(shù)據(jù)保存在同一張數(shù)據(jù)庫表中
2.2.2 第二范式示例
示例:
學(xué)號和課程編號作為聯(lián)合主鍵
課程名稱只依賴于課程編號,而和學(xué)號沒有關(guān)系
分析以上的設(shè)計(jì)發(fā)現(xiàn)數(shù)據(jù)冗余
如何解決呢?
提取出學(xué)生表
提取成課程表
提取選課表,存放選課記錄
1,學(xué)生表
2,課程表
3,選課表
2.3 第三范式
2.3.1 第三范式定義
要求:
確保數(shù)據(jù)表中的每一列數(shù)據(jù)都和主鍵直接相關(guān),而不能間接相關(guān)
屬性不依賴于其他非主屬性
示例1:學(xué)生班級表
分析以上的表,發(fā)現(xiàn)有問題存在 班級名稱和班級信息出現(xiàn)了數(shù)據(jù)冗余
如何解決?
1,學(xué)生表
2,班級表
2.4 范式優(yōu)缺點(diǎn)
范式優(yōu)點(diǎn):
結(jié)構(gòu)合理
冗余較小
盡量避免插入刪除修改異常
缺點(diǎn):
性能降低
多表查詢比單表查詢速度慢
數(shù)據(jù)庫的設(shè)計(jì)應(yīng)該根據(jù)當(dāng)前情況和需求做出靈活的處理。
在實(shí)際設(shè)計(jì)中,要整體遵循范式理論。
如果在某些特定的情況下還死死遵循范式也是不可取的,因?yàn)榭赡芙档蛿?shù)據(jù)庫的效率,此時(shí)可以適當(dāng)增加冗余而提高性能。
示例:
比如經(jīng)常購物車條目的中除了條目編號,商品編號,商品數(shù)量外,可以增加經(jīng)常使用的商品名稱,商品價(jià)格等
商品表
訂單明細(xì)表
2.5 數(shù)據(jù)庫表之間關(guān)系
數(shù)據(jù)庫表之間的三種關(guān)系:
一對一
關(guān)聯(lián)映射:一對一
一對一關(guān)系就如球隊(duì)與球隊(duì)所在地址之間的關(guān)系,一支球隊(duì)僅有一個(gè)地址,而一個(gè)地址區(qū)也僅有一支球隊(duì)。
數(shù)據(jù)表間一對一關(guān)系的表現(xiàn)有兩種,一種是外鍵關(guān)聯(lián),一種是主鍵關(guān)聯(lián)。圖示如下:
一對一外鍵關(guān)聯(lián):一對多
關(guān)聯(lián)映射:一對多/多對一
存在最普遍的映射關(guān)系,簡單來講就如球員與球隊(duì)的關(guān)系;
一對多:從球隊(duì)角度來說一個(gè)球隊(duì)擁有多個(gè)球員 即為一對多
多對一:從球員角度來說多個(gè)球員屬于一個(gè)球隊(duì) 即為多對一
數(shù)據(jù)表間一對多關(guān)系如下圖:多對多
關(guān)聯(lián)映射:多對多
多對多關(guān)系也很常見,例如學(xué)生與選修課之間的關(guān)系,一個(gè)學(xué)生可以選擇多門選修課,而每個(gè)選修課又可以被多名學(xué)生選擇。
數(shù)據(jù)庫中的多對多關(guān)聯(lián)關(guān)系一般需采用中間表的方式處理,將多對多轉(zhuǎn)化為兩個(gè)一對多。
數(shù)據(jù)表間多對多關(guān)系如下圖:
2.6 三大范式總結(jié)
范式是指導(dǎo)數(shù)據(jù)設(shè)計(jì)的規(guī)范化理論,可以保證數(shù)據(jù)庫設(shè)計(jì)質(zhì)量
第一范式:字段不能再分
第二范式:不存在局部依賴
第三范式:不含傳遞依賴(間接依賴)
使用范式可以減少冗余,但是會降低性能
特定表的的設(shè)計(jì)可以違反第三范式,增加冗余提高性能
鏈接:https://www.cnblogs.com/jingzh/p/15270698.html
(版權(quán)歸原作者所有,侵刪)
