數(shù)據(jù)庫設(shè)計(jì)——三范式理解

數(shù)據(jù)庫

數(shù)據(jù)庫設(shè)計(jì)

三范式

數(shù)據(jù)庫表設(shè)計(jì)時(shí),我們往往需要遵守?cái)?shù)據(jù)庫設(shè)計(jì)的三范式,即使有時(shí)候個(gè)別情況不會(huì)遵守到第三范式,但是第一和第二都是為了數(shù)據(jù)庫的結(jié)構(gòu)和對表的讀取而要去嚴(yán)格遵守的。

第一范式:字段的原子性

就是數(shù)據(jù)庫表中的所有字段值都是不可分解的原子值

需要根據(jù)實(shí)際需求來頂,比如數(shù)據(jù)庫系統(tǒng)中用到“address”--”地址“屬性,原本我們可以直接根據(jù)地址建一個(gè)字段,但是地址里面會(huì)是省份、城市、鄉(xiāng)鎮(zhèn)、村,所以我們需要對地址這個(gè)字段進(jìn)行拆分,保證每一個(gè)字段的原子性。

單從宏觀來講,關(guān)系型數(shù)據(jù)庫,默認(rèn)滿足第一范式。

在一對多的設(shè)計(jì)中使用逗號(hào)分隔多個(gè)外鍵,雖然方便,但是不利于維護(hù)和索引,阿里巴巴開發(fā)手冊上是在項(xiàng)目應(yīng)用中強(qiáng)制規(guī)定不得使用外鍵的級(jí)聯(lián),一切外鍵概念必須在應(yīng)用層中解決。像外鍵與級(jí)聯(lián)更新適用于單機(jī)低并發(fā),不適合分布式、高并發(fā)集群;級(jí)聯(lián)更新是強(qiáng)阻塞,存在數(shù)據(jù)庫更新風(fēng)暴的風(fēng)險(xiǎn);外鍵影響數(shù)據(jù)庫的插入速度。

第二范式:消除對主鍵的部份依賴

就是 在表中加上一個(gè)與業(yè)務(wù)邏輯無關(guān)的字段為主鍵

主鍵:可以唯一表示記錄的字段或者字段集合

依賴:A字段可以確定B字段,則B字段依賴A字段

比如知道下一節(jié)課是數(shù)學(xué),就能確定任課老師,于是 周幾和**下一節(jié)課 **就能構(gòu)成復(fù)合主鍵,能夠確定去那個(gè)教室上課,任課老師是誰等。但我們經(jīng)常增加一個(gè)id 作為主鍵,而消除對主鍵的依賴

對主鍵的部份依賴:某個(gè)字段依賴復(fù)合主鍵中的一部分

解決方案:新增一個(gè)獨(dú)立字段作為主鍵

第三范式:消除對主鍵的傳遞依賴

傳遞依賴:B字段依賴于A, C字段又依賴于B。

任課老師是誰取決于是什么課,是什么課又取決于主鍵id。因此需要將此表拆分為兩張表 日程表和課程表 (獨(dú)立數(shù)據(jù)獨(dú)立建表) :

id weekday course_address course_id
1001 周一 11號(hào)教學(xué)樓 14252
course_id course_name course_name
14252 math 楊老師

這樣就減少了數(shù)據(jù)的冗余(即使周一至周日每天都有 math 課,也只是course_id:14252 出現(xiàn)了7次)

后續(xù)

現(xiàn)在對此的理解還沒有理解透,有新的理解了再來更i新. . . . . .

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容