正規化是關聯式資料庫理論的基礎,也是我們在設計資料庫結構過程中所要遵循的規則和指導方法。資料庫的設計正規化是資料庫設計所需要滿足的規範。只有理解資料庫的設計正規化,才能設計出高效率、優雅的資料庫,否則可能會設計出錯誤的資料庫。
目前關聯式資料庫有六種正規化:第一正規化(1nf)、第二正規化(2nf)、第三正規化(3nf)、巴斯-科德正規化(bcnf)、第四正規化(4nf)和第五正規化(5nf,還又稱完美正規化)。滿足最低要求的叫第一正規化,簡稱1nf。在第一正規化基礎上進一步滿足一些要求的為第二範
式,簡稱2nf。其餘依此類推。各種正規化呈遞次規範,越高的正規化資料庫冗餘越小。通常所用到的只是前三個正規化,即:第一正規化(1nf),第二正規化(2nf),第三正規化(3nf)。
即要求實體的屬性完全依賴於主關鍵字。所謂完全依賴是指不能存在僅依賴主關鍵字一部分的屬性。
簡而言之,第三正規化(3nf)要求乙個關係中不包含已在其它關係已包含的非主關鍵字資訊。例如,存在乙個部門資訊表,其中每個部門有部門編號(dept_id)、部門名稱、部門簡介等資訊。那麼在員工資訊表中列出部門編號後就不能再將部門名稱、部門簡介等與部門有關的資訊再加入員工資訊表中。如果不存在部門資訊表,則根據第三正規化(3nf)也應該構建它,否則就會有大量的資料冗餘。簡而言之,第三正規化就是屬性不依賴於其它非主屬性,也就是在滿足2nf的基礎上,任何非主屬性不得傳遞依賴於主屬性。
第二正規化和第三正規化如何區別?
第二正規化:非主鍵列是否依賴主鍵(包括一列通過某一列間接依賴主鍵),要是有依賴關係的就是第二正規化;
第三正規化:非主鍵列是否是直接依賴主鍵,不能是那種通過傳遞關係的依賴的。要是符合這種就是第三正規化;
使用正規化有哪些優點和缺點?
正規化可以避免資料冗餘,減少資料庫的空間,減輕維護資料完整性的麻煩。
正規化再給我們帶來的上面的好處時,同時也伴隨著一些不好的地方:按照正規化的規範設計出來的表,等級越高的正規化設計出來的表越多。
如第一正規化可能設計出來的表可能只有一張表而已,再按照第二正規化去設計這張表時就可能出來兩張或更多張表,如果再按第三正規化或更高的正規化去設計這張表會出現更多比第二正規化多的表。
表的數量越多,當我們去查詢一些資料,必然要去多表中去查詢資料,這樣查詢的時間要比在一張表中查詢中所用的時間要高很多。
也就是說我們所用的正規化越高,對資料操作的效能越低。
所以我們在利用正規化設計表的時候,要根據具體的需求再去權衡是否使用更高正規化去設計表。在一般的專案中,我們用的最多也就是第三正規化,第三正規化也就可以滿足我們的專案需求,效能好而且方便管理資料;
當我們的業務所涉及的表非常多,經常會有多表發生關係,並且我們對錶的操作要時間上要盡量的快,這時可以考慮我們使用「反正規化」。
不滿足正規化的模型,就是反正規化模型。
反正規化跟正規化所要求的正好相反,在反正規化的設計模式,我們可以允許適當的資料的冗餘,用這個冗餘去取運算元據時間的縮短。本質上就是用空間來換取時間,把資料冗餘在多個表中,當查詢時可以減少或者是避免表之間的關聯;
rdbms模型設計過程中,常常使用正規化約束我們的模型,但在nosql模型中則大量採用反正規化。
正規化化模型
資料沒有冗餘,更新容易
當表的數量比較多,
查詢設計需要很多關聯模型(join)時,會導致查詢效能低下
反正規化化模型
資料冗餘將帶來很好的讀取效能
(因為不需要join很多表,而且通常反正規化模型很少做更新操作)
需要維護冗餘資料,從目前nosql的發展可以看到,
對磁碟空間的消耗是可以接受的
關聯式資料庫的正規化和反正規化設計
正規化是關聯式資料庫理論的基礎,也是我們在設計資料庫結構過程中所要遵循的規則和指導方法。資料庫的設計正規化是資料庫設計所需要滿足的規範。只有理解資料庫的設計正規化,才能設計出高效率 優雅的資料庫,否則可能會設計出錯誤的資料庫。目前關聯式資料庫有六種正規化 第一正規化 1nf 第二正規化 2nf 第三...
關聯式資料庫的正規化和反正規化設計
關聯式資料庫的正規化和反正規化設計 正規化是關聯式資料庫理論的基礎,也是我們在設計資料庫結構過程中所要遵循的規則和指導方法。資料庫的設計正規化是資料庫設計所需要滿足的規範。只有理解資料庫的設計正規化,才能設計出高效率 優雅的資料庫,否則可能會設計出錯誤的資料庫。目前關聯式資料庫有六種正規化 第一正規...
關聯式資料庫設計正規化
簡介 設計關聯式資料庫時,遵從不同的規範要求,設計出合理的關係型資料庫,這些不同的規範要求被稱為不同的正規化,各種正規化呈遞次規範,越高的正規化資料庫冗餘越小。目前關聯式資料庫有六種正規化 第一正規化 1nf 第二正規化 2nf 第三正規化 3nf 巴德斯科正規化 bcnf 第四正規化 4nf 和第...