mysql中的範式 範式 範式:Normal Format,是一種離散數學中的知識,是為瞭解決數據的存儲與優化的問題:保存數據的存儲之後,凡是能夠通過關係尋找出來的數據,堅決不再重覆存儲,終極目標是為了減少數據的冗餘。範式:是一種分層結構的規範,分為六層,每一層都比上一層更加嚴格,若要滿足下一層範式 ...
mysql中的範式
範式
範式:Normal Format,是一種離散數學中的知識,是為瞭解決數據的存儲與優化的問題:保存數據的存儲之後,凡是能夠通過關係尋找出來的數據,堅決不再重覆存儲,終極目標是為了減少數據的冗餘。
範式:是一種分層結構的規範,分為六層,每一層都比上一層更加嚴格,若要滿足下一層範式,前提是滿足上一層範式。
六層範式:1NF,2NF,….6NF。 6NF最高層,最嚴格
MySql屬於關係型資料庫:有空間浪費,與範式所解決的問題不謀而合:在設計資料庫的時候,會利用到範式來指導設計。
但是資料庫不單是要解決空間問題,還要保證效率問題。範式只為解決空間問題,所以資料庫的設計又不可能完全按照範式的要求實現,一般情況下,只有前三種範式需要滿足。
範式在資料庫的設計當中是有指導意義,但是不是強制規範。
1NF
第一範式:在設計表存儲數據的時候,如果表中設計的欄位存儲的數據,在取出來使用之前,還需要額外的處理(拆分),那麼說表的設計不滿足第一範式,第一範式要求欄位的數據就有原子性:不可再分。
2NF
第二範式:在數據表設計的過程中,如果有複合主鍵(多欄位主鍵),且表中有欄位並不是由整個主鍵來確定,而是依賴主鍵中的某個欄位(主鍵的部分):存在欄位依賴主鍵的部分的問題,稱之為部分依賴,第二範式就是解決表不允許出現部分依賴。
以上表中:因為講師沒有辦法作為獨立主鍵,需要結合班級才能作為主鍵(複合主鍵:一個老師在一個班永遠只能帶一階級的課),代課時間,開始和結束欄位都是與當前代課主鍵(講師和班級),但是性別並不依賴班級,教師並不依賴講師,性別隻依賴講師,教師只依賴班級,出現了性別和教師依賴主鍵中的一部分:部份依賴,不符合第二範式。
解決方案1:可以將性別 與講師單獨成表,班級與教室單獨成表
解決方案2:取消複合主鍵,使用邏輯主鍵。
3 NF
要滿足第三範式,必須滿足第二範式。
第三範式:理論上講,應該一張表中的所有欄位都應該直接依賴主鍵,如果表設計中存在一個欄位,並不直接依賴主鍵,而是通過某個非主鍵欄位依賴,最終實現依賴主鍵,把這種不是直接依賴主鍵,而是依賴非主鍵欄位的依賴關係稱之為傳遞依賴。第三範式就是要解決傳遞依賴的問題
講師帶課表
以上設計方案中,性別依賴講師存在,講師依賴主鍵,教室依賴班級,班級依賴主鍵,性別和教室都存在傳遞依賴。
解決方案:將存在傳遞依賴的欄位以及依賴的欄位本身單獨取出,形成一個單獨的表,然後在需要對應信息的時候,使用對應的實體表的主鍵加進來。
講師帶課表
講師表 id=講師 主鍵是講師 而不是邏輯主鍵(具有傳遞依賴)
班級表 id=班級 主鍵是班級 而不是邏輯主鍵(具有傳遞依賴)
二、逆規範化
有時候,在設計表的時候,如果一張表中有幾個欄位需要從另外的表中去獲取信息,理論上講,的確可以獲得想要的數據,但是效率低一點,會刻意的在某些表中,不去保存另外表的主鍵,而是直接保存想要的數據信息,這樣一來,在查詢數據的時候,一張表可以直接提供數據,而不需要多表查詢((效率低),但是冗餘會增加
逆規範化:磁碟利用率與效率的對抗。