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

函數(shù)依賴關(guān)系

完全函數(shù)依賴:
A和B能夠推斷出來C,但是單獨(dú)的A或B無(wú)法推斷出來C,那么稱C完全依賴于A,B

部分函數(shù)依賴:
A和B能夠推斷出C,通過A能夠推斷出C,或者通過B也能推斷出C,那么稱C部分依賴于A,B

傳遞函數(shù)依賴:
A能夠推斷出B,通過B能夠得到C,但是通過C得不到A,那么說C傳遞依賴于A

了解了上面的函數(shù)依賴之后,然后再來了解數(shù)據(jù)庫(kù)設(shè)計(jì)三范式就比較清楚明了

第一范式

第一范式比較好理解,即列滿足原子性,即列是不可分割的.
錯(cuò)誤示范


image.png

正確示范:


image.png

第一范式是所有數(shù)據(jù)庫(kù)的最基本要求.

第二范式:

第二范式是在第一范式的基礎(chǔ)上建立起來的
不能存在非主鍵字段部分函數(shù)依賴與主鍵字段

image.png

上圖主鍵為學(xué)號(hào)+姓名聯(lián)合主鍵,主鍵是要能夠唯一標(biāo)識(shí)一行數(shù)據(jù),當(dāng)一個(gè)列不能唯一標(biāo)識(shí)一行數(shù)據(jù),可以采用聯(lián)合主鍵
但是上圖中,姓名并不完全依賴于學(xué)號(hào)+課程,他可以通過學(xué)號(hào)推斷出來,所以出現(xiàn)了非主鍵字段部分依賴于主鍵字段,所以不滿足

可以拆分成如下,去掉了部分函數(shù)依賴:


image.png

image.png

第三范式:

第三范式是在滿足第二范式基礎(chǔ)上出現(xiàn)的第三范式
不能存在 非主鍵字段傳遞函數(shù)依賴于主鍵字段

image.png

上圖中,存在傳遞函數(shù)依賴,即
學(xué)號(hào)-->系名-->系主任,但是系主任推斷不出學(xué)號(hào),所以存在傳遞函數(shù)依賴,需要繼續(xù)拆分


image.png

image.png

三范式小結(jié):

數(shù)據(jù)庫(kù)范式越高,數(shù)據(jù)冗余越低,但是伴隨著需要join連接,必然導(dǎo)致性能下降,所以一味地追求范式并不是很好的決定,數(shù)據(jù)庫(kù)范式是時(shí)間換空間.犧牲查詢時(shí)間,節(jié)省了空間
因?yàn)槟阆胂?就比如第二范式那塊,拆分成的兩個(gè)表一個(gè),一個(gè)表就不帶系名了,然后兩個(gè)表通過關(guān)聯(lián)能夠得到最初的那個(gè)大表,這樣就節(jié)省了存儲(chǔ)空間.節(jié)省了存儲(chǔ)系名的那個(gè)空間.

因?yàn)樵谠缙诨ヂ?lián)網(wǎng)剛起步階段,磁盤很貴,不像現(xiàn)在這么便宜,所以大家追求的是時(shí)間換空間,但是現(xiàn)在不一樣了,磁盤很便宜,而且分布式技術(shù)的成熟,使得大家更看重,典型的比如數(shù)據(jù)倉(cāng)庫(kù)的事實(shí)表和維度表,就是空間換時(shí)間,允許一定的數(shù)據(jù)冗余,換來查詢性能的提升,所以在數(shù)倉(cāng)中并不是很看中三范式,甚至有些反三范式.

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

相關(guān)閱讀更多精彩內(nèi)容

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