1、範式的基本理論
1 範式的定義
範式(Normal Format)是離散數學中的一種知識,是為了解決資料的存儲與優化的問題;儲存資料之後,凡是能夠通過關系尋找出來的資料,堅決不再重複存儲,終極目标是為了減少資料的備援。
範式是一種分層結構的規範,共分為六層,每一層都比上一層更加嚴謹(本文隻介紹三種範式),若要滿足下一層範式的前提是要滿足上一層範式。
2 六層範式以及範式對于資料庫設計的指導
1、六層範式:1NF、…、6NF;其中1NF是最底層,要求也最低,6NF是最高層,要求最高。
2、mysql屬于關系型資料庫,有空間浪費,是以在mysql中進行資料庫及表的設計時,對于空間的節省也很重要,而這與範式所要解決的問題不謀而合,是以,在設計資料庫的時候,會使用範式來作為指導;但是資料庫不單是要解決空間問題,還要保證效率問題,而範式隻為解決空間問題,是以資料庫的設計又不可能完全按照範式的要求實作,一般情況下,隻要滿足3NF即可。
注: 範式在資料庫的設計當中是有指導意義的,但是不是強制規範的。
2、1NF(第一範式)
第一範式:在設計表存儲資料的時候,如果表中設計的字段存儲的資料,在取出來使用之前還需要額外的處理(拆分),那麼說表的設計不滿足第一範式;第一範式要求字段的資料具有原子性。
滿足不滿足範式主要是依照需求而定,有可能在一種需求條件下設計的表滿足第一範式,但是一旦在另一種需求下,則就不滿足第一範式了。
3、2NF(第二範式)
在資料表設計的過程中,如果有複合主鍵(多字段主鍵),且表中有字段并不是由整個主鍵來确定,而是依賴于主鍵中的某個字段(主鍵的部分),存在字段依賴主鍵的一部分的問 題,稱之為部分依賴,第二範式就是要解決表設計不允許出現部分依賴。
對于部分依賴的解決方案:拆分原表或者是取消複合主鍵,改用邏輯主鍵
4、3NF(第三範式)
一張表中,所有的字段都應該直接依賴于主鍵(邏輯主鍵:代表的是業務主鍵),如果表設計中存在一個字段,并不是直接依賴于主鍵,而是通過某個非主鍵字段依賴,最終實作依賴主鍵,把這種不是直接依賴主鍵,而是依賴非主鍵字段的依賴關系稱之為傳遞依賴。第三範式就是要解決傳遞依賴問題。
解決方案:将存在傳遞依賴的字段以及傳遞依賴的主鍵取出,形成一個新表,然後在需要對應的資訊的時候,使用對應的實體表的主鍵加進來。
5、逆規範化
有時候在設計表的時候,如果一張表中有幾個字段是需要從另外的表中去擷取資訊,理論上講,的确可以擷取到想要的資料,但是效率會低一點,是以會刻意的在某些表中,不去儲存另外表的主鍵(邏輯主鍵),而是直接儲存想要的資料資訊,這樣一來,在查詢資料的時候,一張表可以直接提供資料,而不需要多表查詢(效率低),進而提高查詢的效率,但是相應的此舉會導緻資料備援增加(磁盤占用量增加)。這是一個效率(查詢)與磁盤空間使用率的對抗與權衡。