MySql 正規化和反正規化

2021-09-10 15:23:45 字數 1791 閱讀 4863

正規化和反正規化

設計關係型資料庫時,需要遵從不同的規範,設計合理的關係型資料庫,不同的規範被稱為不同的正規化,各種正規化呈遞次規範,越高的正規化資料庫冗餘約小。在關係型資料庫中有六中正規化:第一正規化(1nf),第二正規化(2nf),第三正規化(3nf),bcnf,第四正規化(4nf),第五正規化(5nf)。一般資料庫設計到第三正規化就行了。

第一正規化

1nf是對屬性的原子性約束,要求屬性具有原子性,不可分。屬性不可分

下面這個例子就不滿足第一正規化:

姓名年齡

位址kche

省份          城市

s               n

上面這個例子就不滿足第一正規化,所以對於任意的關係型資料庫都不能儲存。

第二正規化

2nf是對記錄的唯一性約束,要求記錄具有唯一的標識,即實體的唯一性。非主屬性完全依賴於碼。(消除非主屬性對碼的部分依賴)

主屬性:通俗的說就是碼。

非主屬性:不包含在任何碼中的屬性。

乙個關係模式不滿足2nf就會產生以下幾個問題:

(1)插入異常,例如有一張表slc(stu_id, dept, loc, c_id, grade ). slc的碼為(stu_id, c_id)。stu_id:學號,dept:系別,loc:系地點,c_id:課程號,grade_年級。如果插入乙個學生stu_id=s1,dept=cs, loc=hy, 但是該學生並沒有選課,則該學生資訊無法插入到表中。

(2)刪除異常,如果學生s1選了c1這門課,但是又不想選了,需要刪除c1這個資料項,因為c1是主屬性,所以刪除的話,整個s1的資訊都會被刪除,即不應該刪除的資訊也刪除了。

(3)修改複雜,如果學生從計算機系轉到數學系,則不僅需要修改dept,還需要修改loc。

上述情況可以分解成兩個表:

sl(stu_id,dept,loc)和sc(stu_id, c_id, grade)

第三正規化

對欄位冗餘性的約束,即任何字段不能由其它字段派生出來,要求字段沒有冗餘。

消除傳遞依賴。(消除非主屬性對碼的傳遞依賴)

例如表sl(stu_id,dept,loc)。知道乙個系dept,就可以知道系位址loc,所以dept->loc存在傳遞依賴。

消除傳遞依賴可以使用將其分成兩張表: sd(stu_id,dept)和dl(dept,loc)。

bcnf

每個屬性都不傳遞依賴於碼,主屬性不依賴與主屬性。(消除主屬性對碼的部分依賴和傳遞依賴)

第四正規化

要求同乙個表內的多對多關係刪除。

第五正規化

從最終結構重新建立原始結構

正規化的優點:

1)正規化化的資料庫更新起來更加快;

2)正規化化之後,只有很少的重複資料,只需要修改更少的資料;

3)正規化化的表更小,可以在記憶體中執行;

4)很少的冗餘資料,在查詢的時候需要更少的distinct或者group by語句。

正規化的缺點:

5)正規化化的表,在查詢的時候經常需要很多的關聯,因為單獨乙個表內不存在冗餘和重複資料。這導致,稍微複雜一些的查詢語句在查詢正規化的schema上都可能需要較多次的關聯。這會增加讓查詢的代價,也可能使一些索引策略無效。因為正規化化將列存放在不同的表中,而這些列在乙個表中本可以屬於同乙個索引。

反正規化的優點:

1)可以避免關聯,因為所有的資料幾乎都可以在一張表上顯示;

2)可以設計有效的索引;

反正規化的缺點:

3)**內的冗餘較多,刪除資料時候會造成表有些有用的資訊丟失。

所以在設計資料庫時,要注意混用正規化化和反正規化化。

高效能mysql筆記(2)-正規化和反正規化

正規化和反正規化的優缺點

mysql 反正規化 mysql 正規化和反正規化

第一正規化 1nf 強調的是列的原子性,即列不能夠再分成其他幾列。第二正規化 2nf 首先是 2nf,另外包含兩部分內容一是表必須有乙個主鍵 二是沒有包含在主鍵中的列必須完全依賴於主鍵,而不能只依賴於主鍵的一部分。第三正規化 3nf 首先是 2nf,另外非主鍵列必須直接依賴於主鍵,不能存在傳遞依賴。...

mysql 正規化化 MySQL 正規化和反正規化

1.第一正規化 1nf 列不能再拆分 原子性,字段不可分 列的資訊 只要是關係型資料庫,就自動滿足1nf 2.第二正規化 2nf 主鍵唯一,且被依賴 在第一正規化基礎上建立的,即滿足第二正規化的必須先滿足第一正規化。要求db表中的每個例項或行必須可以被唯一區分,通常設計乙個主鍵來實現,其他屬性完全依...

MySQL三大正規化和反正規化

1.第一正規化 確保資料表中每列 字段 的原子性。如果資料表中每個欄位都是不可再分的最小資料單元,則滿足第一正規化。比如位址可再分 例如 user使用者表,包含欄位id,username,password 2.第二正規化 在第一正規化的基礎上更進一步,目標是確保表中的每列都和主鍵相關。如果乙個關係滿...