正規化(Normalization)這名詞有學過資料庫的人應該都聽過…
我剛剛學資料庫的時侯真的搞不清楚這三個字的含意…
也完全不知道為什麼要正規化…

到後來…我才知道…原來丫…
正規化就如同書本上所說的:
A.欄位唯一性 (Field Uniqueness)
B.主關鍵欄位 (Primary Key)
C.功能關聯性 (Function Dependence)
D.欄位獨立性 (Field Independence)

管他的什麼1NF->2NF…反正他的意思就是…
當成鍵值的欄位不可以重複,
資料重複出現的欄位分解到另一個table,
欄位的關聯要明確!!!

事實上,如果每個資料庫都依正規化這樣去拆…
帶來的好處是資料乾淨、關聯明確、
不容易出現多餘重複的欄位…節省實體記憶體空間!!!!

在系統的開發階段,過度的正規化不見得是一件好事!!!
有一陣子,我像是著了正規化的魔…
後來發現,提升效能的最大殺手就是過度的正規化!!!

為了查詢顯示出資料,做了七、八個table來關聯資料出來…
如果可以把這些關聯給簡化…效率不是有很大的提升嗎?
當資料超過十萬筆、二十萬筆時…花費在關聯的時間應該是當時倍數吧??
搞不好是0.001秒(沒關聯)與 0.1秒(有關聯)的差別------>100倍哦
(聽說超過六個關聯…資料一多時效能就會被拉下來)

小弟最近系統開發過程中在調校的階段
試著把一些常用的關聯給反正規化
也就是說,讓他回來原來的表格…
讓原來需要關聯四五個talbe的查詢簡化至一到二個table關聯!!
或許因此多了幾個欄位(浪費了硬碟空間-->現在的硬碟空間應該不用怕不夠用吧!!!)
但是反正規化的操作當資料大量查詢或交易時,
在效能上將會比先前有明顯的提升!!!

對於某些人說來(就是我)這曾經是個迷失…
事實上…做反正規化時-->心態上不可以有潔癖!!!!






arrow
arrow
    全站熱搜

    湯瑪的吳 發表在 痞客邦 留言(3) 人氣()