日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

一篇文章搞懂数据仓库:三范式与反范式

發(fā)布時(shí)間:2024/7/23 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一篇文章搞懂数据仓库:三范式与反范式 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

少年易老學(xué)難成,一寸光陰不可輕。

目錄

一、第一范式

二、第二范式

三、第三范式

四、反范式化

五、范式化設(shè)計(jì)和反范式化設(shè)計(jì)的優(yōu)缺點(diǎn)

5.1 范式化 (時(shí)間換空間)

5.2 反范式化(空間換時(shí)間)

六、OLAP和OLTP中范式設(shè)計(jì)


? ? ? ?范式是符合某一種級(jí)別的關(guān)系模式的集合。構(gòu)造數(shù)據(jù)庫(kù)必須遵循一定的規(guī)則。在關(guān)系數(shù)據(jù)庫(kù)中,這種規(guī)則就是范式。

? ? ? ?關(guān)系數(shù)據(jù)庫(kù)中的關(guān)系必須滿足一定的要求,即滿足不同的范式。大數(shù)據(jù)生態(tài)中,各類(lèi)強(qiáng)大的查詢引擎層出不窮,相對(duì)廉價(jià)的磁盤(pán)和分布式技術(shù),也讓數(shù)據(jù)冗余變得可接受甚至更加方便。

? ? ? ?在創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)的過(guò)程中,范化是將其轉(zhuǎn)化為一些表的過(guò)程,這種方法可以使從數(shù)據(jù)庫(kù)得到的結(jié)果更加明確。這樣可能使數(shù)據(jù)庫(kù)產(chǎn)生重復(fù)數(shù)據(jù),從而導(dǎo)致創(chuàng)建多余的表。范化是在識(shí)別數(shù)據(jù)庫(kù)中的數(shù)據(jù)元素、關(guān)系以及定義所需的表和各表中的項(xiàng)目等這些初始工作之后的一個(gè)細(xì)化的過(guò)程。

一、第一范式

1NF要求屬性具有原子性,即列不可再分解;

表:字段1、 字段2(字段2.1、字段2.2)、字段3 ......

如學(xué)生(學(xué)號(hào),姓名,性別,出生年月日)

有些鋼筋可能要問(wèn)了,姓名可以拆成姓、名兩列,?“出生年月日” 也可以拆成年、月、日三個(gè)字段。所以就不滿足第一范式了!!!這里再?gòu)?qiáng)調(diào)一下原子性,原子性是根據(jù)使用方便來(lái)自定義的最小單位。中國(guó)人一般姓名一起用,美國(guó)就習(xí)慣姓名分別存兩字段

二、第二范式

2NF要求記錄有惟一標(biāo)識(shí),即不存在部分依賴;

簡(jiǎn)單來(lái)說(shuō)就是拆表,以人為粒度做一張明細(xì)表,以課程號(hào)為粒度做一張維度表,兩表關(guān)聯(lián)使用,消除了數(shù)據(jù)冗余

表:學(xué)號(hào)、課程號(hào)、姓名、學(xué)分;

這個(gè)表明顯說(shuō)明了兩個(gè)事務(wù):學(xué)生信息, 課程信息;由于非主鍵字段必須依賴主鍵,這里學(xué)分依賴課程號(hào)姓名依賴與學(xué)號(hào),所以不符合二范式。

可能會(huì)存在問(wèn)題:

  • 數(shù)據(jù)冗余:每條記錄都含有相同信息;
  • 刪除異常:刪除所有學(xué)生成績(jī),就把課程信息全刪除了;
  • 插入異常:學(xué)生未選課,無(wú)法記錄進(jìn)數(shù)據(jù)庫(kù);
  • 更新異常:調(diào)整課程學(xué)分,所有行都調(diào)整。

正確做法:?
學(xué)生:Student(學(xué)號(hào), 姓名);?
課程:Course(課程號(hào), 學(xué)分);?
選課關(guān)系:StudentCourse(學(xué)號(hào), 課程號(hào), 成績(jī))。

三、第三范式

3NF是對(duì)字段的冗余性,要求任何字段不能由其他字段派生出來(lái),它要求字段沒(méi)有冗余,即不存在傳遞依賴;

表: 學(xué)號(hào), 姓名, 年齡, 學(xué)院名稱(chēng), 學(xué)院電話

因?yàn)榇嬖?strong>依賴傳遞: (學(xué)號(hào)) → (學(xué)生)→(所在學(xué)院) → (學(xué)院電話) 。

可能會(huì)存在問(wèn)題:

  • 數(shù)據(jù)冗余:有重復(fù)值;
  • 更新異常:有重復(fù)的冗余信息,修改時(shí)需要同時(shí)修改多條記錄,否則會(huì)出現(xiàn)數(shù)據(jù)不一致的情況?。

正確做法:

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

學(xué)院:(學(xué)院, 電話)。

四、反范式化

一般說(shuō)來(lái),數(shù)據(jù)庫(kù)只需滿足第三范式(3NF)就行了。

? ? 沒(méi)有冗余的數(shù)據(jù)庫(kù)設(shè)計(jì)可以做到。但是,沒(méi)有冗余的數(shù)據(jù)庫(kù)未必是最好的數(shù)據(jù)庫(kù),有時(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í)考慮。降低范式就是增加字段,允許冗余,達(dá)到以空間換時(shí)間的目的

? 〖例〗:有一張存放商品的基本表,如表1所示。“金額”這個(gè)字段的存在,表明該表的設(shè)計(jì)不滿足第三范式,因?yàn)椤敖痤~”可以由“單價(jià)”乘以“數(shù)量”得到,說(shuō)明“金額”是冗余字段。但是,增加“金額”這個(gè)冗余字段,可以提高查詢統(tǒng)計(jì)的速度,這就是以空間換時(shí)間的作法。

? ? 在Rose 2002中,規(guī)定列有兩種類(lèi)型:數(shù)據(jù)列計(jì)算列。“金額”這樣的列被稱(chēng)為“計(jì)算列”,而“單價(jià)”和“數(shù)量”這樣的列被稱(chēng)為“數(shù)據(jù)列”。

五、范式化設(shè)計(jì)和反范式化設(shè)計(jì)的優(yōu)缺點(diǎn)

5.1 范式化 (時(shí)間換空間)

優(yōu)點(diǎn):

  • 范式化的表減少了數(shù)據(jù)冗余,數(shù)據(jù)表更新操作快、占用存儲(chǔ)空間少。

缺點(diǎn):

  • 查詢時(shí)需要對(duì)多個(gè)表進(jìn)行關(guān)聯(lián),查詢性能降低。?
  • 更難進(jìn)行索引優(yōu)化

5.2 反范式化(空間換時(shí)間)

反范式的過(guò)程就是通過(guò)冗余數(shù)據(jù)來(lái)提高查詢性能,但冗余數(shù)據(jù)會(huì)犧牲數(shù)據(jù)一致性

優(yōu)點(diǎn):

  • 可以減少表關(guān)聯(lián)
  • 可以更好進(jìn)行索引優(yōu)化

缺點(diǎn):

  • 存在大量冗余數(shù)據(jù)
  • 數(shù)據(jù)維護(hù)成本更高(刪除異常,插入異常,更新異常)

六、OLAP和OLTP中范式設(shè)計(jì)

OLAP 一般冗余比較多,以查詢分析為主,這種一般都是采用反范式設(shè)計(jì),以提高查詢效率。更新一般是定時(shí)大批量數(shù)據(jù)插入。

OLTP 則是盡可能消除冗余,以提高變更的效率。因?yàn)檫@種應(yīng)用無(wú)時(shí)無(wú)刻不在頻繁變化。

?

?

大數(shù)據(jù)生態(tài)圈常用組件(一):數(shù)據(jù)庫(kù)、查詢引擎、ETL工具、調(diào)度工具等

傳送門(mén):?https://blog.csdn.net/weixin_39032019/article/details/89340739

?

?

總結(jié)

以上是生活随笔為你收集整理的一篇文章搞懂数据仓库:三范式与反范式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。