三大範式

範式

範式(Nomal Format):是離散數學中的知識,是爲了解決數據的存儲與優化問題,保證數據存儲之後,凡是能夠通過關係尋找出來的數據,堅決不再重複存儲,終極目標是爲了減少數據的冗餘。
範式是一種分層結構的規範,分爲6層。每一層都比上一層更加嚴格;若要滿足下一層範式,前提是滿足上一層範式。
六層範式:1NF,2NF…6NF,1NF是最底層,要求最低,6NF最高層,最嚴格。
mysql屬於關係型數據庫,有空間浪費,需要節省存儲空間,與範式所要解決的問題不謀而合,在設計數據庫的時候,會利用到範式來知道設計。但是數據庫不單要解決空間問題,還要保證效率問題,範式只解決空間問題,所以數據庫的設計又不能完全按照範式的要求實現,一般情況下,只有前三種範式需要滿足,即滿足三範式。
範式在數據庫的設計中有指導意義,但是不是強制規範。

1NF

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

2NF

要滿足第二範式必須滿足第一範式。
第二範式:在數據表設計的過程中,如果有複合主鍵(多字段主鍵),且表中有字段並不是由整個主鍵來確定,而是依賴主鍵中的某個字段(主鍵的部分),存在字段依賴主鍵部分的問題,稱之爲部分依賴,第二範式就是解決表設計不允許出現部分依賴。
解決方案1:
可以拆表
解決方案2:
取消複合主鍵,使用邏輯主鍵。比如增加一個id。

3NF

要滿足第三範式必須滿足第二範式。
第三範式:理論上說,應該一張表中的所有字段都應該直接依賴主鍵(不包括邏輯主鍵,因爲邏輯主鍵代表的是業務主鍵)。如果表設計中存在一個字段,並不直接依賴主鍵,而是依賴非主鍵字段的依賴關係稱之爲傳遞依賴。第三範式就是解決傳遞依賴問題。
解決方案:將存在傳遞依賴的字段以及依賴的字段本身單獨取出,形成一個單獨的表,然後在需要對應的消息的時候,使用對應實體表的主鍵加進來。

逆規範化:
有時候,在設計表的時候,如果一張表中有幾個字段是需要從另外的表中去獲取信息,理論上來講,的確可以獲取到想要的數據,但是就是效率低一點。會刻意的在某些表中,不去保存另外表的主鍵(邏輯主鍵),而是直接保存想要的數據信息,這樣一來,在查詢數據的時候,一張表可以提供數據,而不需要多表查詢(效率低),但是會導致數據冗餘增加。
逆規範化:磁盤利用率與效率的對抗。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章