天天看點

十四、範式(簡介及三大範式)及逆規範化1、範式的基本理論2、1NF(第一範式)3、2NF(第二範式)4、3NF(第三範式)5、逆規範化

1、範式的基本理論

1 範式的定義

範式(Normal Format)是離散數學中的一種知識,是為了解決資料的存儲與優化的問題;儲存資料之後,凡是能夠通過關系尋找出來的資料,堅決不再重複存儲,終極目标是為了減少資料的備援。

範式是一種分層結構的規範,共分為六層,每一層都比上一層更加嚴謹(本文隻介紹三種範式),若要滿足下一層範式的前提是要滿足上一層範式。

2 六層範式以及範式對于資料庫設計的指導

1、六層範式:1NF、…、6NF;其中1NF是最底層,要求也最低,6NF是最高層,要求最高。

2、mysql屬于關系型資料庫,有空間浪費,是以在mysql中進行資料庫及表的設計時,對于空間的節省也很重要,而這與範式所要解決的問題不謀而合,是以,在設計資料庫的時候,會使用範式來作為指導;但是資料庫不單是要解決空間問題,還要保證效率問題,而範式隻為解決空間問題,是以資料庫的設計又不可能完全按照範式的要求實作,一般情況下,隻要滿足3NF即可。

注: 範式在資料庫的設計當中是有指導意義的,但是不是強制規範的。

2、1NF(第一範式)

第一範式:在設計表存儲資料的時候,如果表中設計的字段存儲的資料,在取出來使用之前還需要額外的處理(拆分),那麼說表的設計不滿足第一範式;第一範式要求字段的資料具有原子性。

滿足不滿足範式主要是依照需求而定,有可能在一種需求條件下設計的表滿足第一範式,但是一旦在另一種需求下,則就不滿足第一範式了。

3、2NF(第二範式)

在資料表設計的過程中,如果有複合主鍵(多字段主鍵),且表中有字段并不是由整個主鍵來确定,而是依賴于主鍵中的某個字段(主鍵的部分),存在字段依賴主鍵的一部分的問 題,稱之為部分依賴,第二範式就是要解決表設計不允許出現部分依賴。

對于部分依賴的解決方案:拆分原表或者是取消複合主鍵,改用邏輯主鍵

4、3NF(第三範式)

一張表中,所有的字段都應該直接依賴于主鍵(邏輯主鍵:代表的是業務主鍵),如果表設計中存在一個字段,并不是直接依賴于主鍵,而是通過某個非主鍵字段依賴,最終實作依賴主鍵,把這種不是直接依賴主鍵,而是依賴非主鍵字段的依賴關系稱之為傳遞依賴。第三範式就是要解決傳遞依賴問題。

解決方案:将存在傳遞依賴的字段以及傳遞依賴的主鍵取出,形成一個新表,然後在需要對應的資訊的時候,使用對應的實體表的主鍵加進來。

5、逆規範化

有時候在設計表的時候,如果一張表中有幾個字段是需要從另外的表中去擷取資訊,理論上講,的确可以擷取到想要的資料,但是效率會低一點,是以會刻意的在某些表中,不去儲存另外表的主鍵(邏輯主鍵),而是直接儲存想要的資料資訊,這樣一來,在查詢資料的時候,一張表可以直接提供資料,而不需要多表查詢(效率低),進而提高查詢的效率,但是相應的此舉會導緻資料備援增加(磁盤占用量增加)。這是一個效率(查詢)與磁盤空間使用率的對抗與權衡。

繼續閱讀