Mysql范式與反范式的利弊
一、三大范式
第一范式
1NF是對屬性的原子性,要求屬性具有原子性,不可再分解;
第一范式是最基本的范式。如果數據庫表中的所有字段值都是不可分解的原子值,就說明該數據庫表滿足了第一范式。數據庫表的每一列都是不可分割的原子數據項,而不能是集合,數組,記錄等非原子數據項。簡而言之,第一范式就是無重復的域。
第二范式
2NF是對記錄的惟一性,要求記錄有惟一標識,即實體的惟一性,即不存在部分依賴;
滿足第二范式必須先滿足第一范式。第二范式需要確保數據庫表中的每一列都和主鍵相關,而不能只與主鍵的某一部分相關(主要針對聯合主鍵而言)。也就是說在一個數據庫表中,一個表中只能保存一種數據,不可以把多種數據保存在同一張數據庫表中。
第三范式
3NF是對字段的冗余性,要求任何字段不能由其他字段派生出來,它要求字段沒有冗余,即不存在傳遞依賴;
首先是 2NF,另外非主鍵列必須直接依賴于主鍵,不能存在傳遞依賴。即不能存在:非主鍵列 A 依賴于非主鍵列 B,非主鍵列 B 依賴于主鍵的情況。簡而言之,第三范式(3NF)要求一個關系中不包含已在其它關系已包含的非主關鍵字信息。例如,存在一個部門信息表,其中每個部門有部門編號(dept_id)、部門名稱、部門簡介等信息。那么在員工信息表中列出部門編號后就不能再將部門名稱、部門簡介等與部門有關的信息再加入員工信息表中。
范式的利弊:
優點:范式可以避免數據冗余,減少數據庫的空間,減輕維護數據完整性的麻煩。
缺點:按照范式的規范設計出來的表,等級越高的范式設計出來的表越多。如第一范式可能設計出來的表可能只有一張表而已,再按照第二范式去設計這張表時就可能出來兩張或更多張表,如果再按第三范式或更高的范式去設計這張表會出現更多比第二范式多 的表。表的數量越多,當我們去查詢一些數據,必然要去多表中去查詢數據,這樣查詢的時間要比在一張表中查詢中所用的時間要高很多。也就是說我們所用的范式越高,對數據操作的性能越低。所以我們在利用范式設計表的時候,要根據具體的需求再去權衡是否使用更高范式去設計表。
推薦 《mysql視頻教程》
二、反范式
故名思義,跟范式所要求的正好相反,在反范式的設計模式,我們可以允許適當的數據的冗余,用這個冗余去取操作數據時間的縮短。也就是用空間來換取時間,把數據冗余在多個表中,當查詢時可以減少或者是避免表之間的關聯。
反范式的利弊:
優點:查詢時可以減少表的關聯;可以更好的進行索引優化;
缺點:存在數據冗余以及數據維護異常;對數據的修改需要更多的成本;
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com