首頁  >  文章  >  資料庫  >  Mysql範式與反範式的利弊

Mysql範式與反範式的利弊

angryTom
angryTom原創
2019-11-26 14:24:403129瀏覽

Mysql範式與反範式的利弊

Mysql範式與反範式的利弊

一、三大範式

第一範式

1NF是對屬性的原子性,要求屬性具有原子性,不可再分解;

第一範式是最基本的範式。如果資料庫表中的所有欄位值都是不可分解的原子值,就表示該資料庫表滿足了第一個範式。資料庫表的每一列都是不可分割的原子資料項,而不能是集合,數組,記錄等非原子資料項。簡而言之,第一個範式就是無重複的域。

第二範式

2NF是對記錄的惟一性,要求記錄有惟一標識,即實體的惟一性,即不存在部分依賴;

滿足第二範式必須先滿足第一範式。第二範式需要確保資料庫表中的每一列都和主鍵相關,而不能只與主鍵的某一部分相關(主要針對聯合主鍵而言)。也就是說在一個資料庫表中,一個表中只能保存一種數據,不可以把多種數據保存在同一張資料庫表中。

第三範式

3NF是對欄位的冗餘性,要求任何欄位不能由其他欄位衍生出來,它要求欄位沒有冗餘,即不存在傳遞依賴;

首先是2NF,另外非主鍵列必須直接依賴主鍵,不能存在傳遞依賴。即不能存在:非主鍵列 A 依賴非主鍵列 B,非主鍵列 B 依賴主鍵的情況。簡言之,第三範式(3NF)要求一個關係中不包含已在其它關係已包含的非主關鍵字資訊。例如,存在一個部門資訊表,其中每個部門有部門編號(dept_id)、部門名稱、部門簡介等資訊。那麼在員工資料表中列出部門編號後就不能再將部門名稱、部門簡介等與部門有關的資訊再加入員工資訊表中。

範式的利弊:

優點:範式可以避免資料冗餘,減少資料庫的空間,並減輕維護資料完整性的麻煩。

缺點:依照範式的規範設計出來的表,等級越高的範式設計出來的表越多。如第一範式可能設計出來的表可能只有一張表而已,再按照第二範式去設計這張表時就可能出來兩張或更多張表,如果再按第三範式或更高的範式去設計這張表會出現更多比第二範式多的表。表的數量越多,當我們去查詢一些數據,必然要去多表中去查詢數據,這樣查詢的時間要比在一張表中查詢中所用的時間要高很多。也就是說我們所用的範式越高,對資料操作的效能越低。所以我們在利用範式設計表的時候,要根據具體的需求再去權衡是否使用更高範式去設計表。

推薦《mysql影片教學#」  

二、反範式

故名思義,跟範式所要求的正好相反,在反範式的設計模式,我們可以允許適當的資料的冗餘,用這個冗餘去取操作資料時間的縮短。也就是用空間來換取時間,把資料冗餘在多個表中,當查詢時可以減少或是避免表之間的關聯。

反範式的利弊:

優點:查詢時可以減少表的關聯;可以更好的進行索引優化;

缺點:存在資料冗餘以及資料維護異常;資料的修改需要更多的成本;

以上是Mysql範式與反範式的利弊的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn