**:
資料庫的設計正規化是資料庫設計所需要滿足的規範,滿足這些規範的資料庫是簡潔的、結構明晰的,同時,不會發生插入(insert)、刪除(delete)和更新(update)操作異常。反之則是亂七八糟,不僅給資料庫的程式設計人員製造麻煩,而且面目可憎,可能儲存了大量不需要的冗餘資訊。
正規化說明
1.1 第一正規化(1nf)無重複的列
所謂第一正規化(1nf)是指資料庫表的每一列都是不可分割的基本資料項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重複的屬性。如果出現重複的屬性,就可能需要定義乙個新的實體,新的實體由重複的屬性構成,新實體與原實體之間為一對多關係。在第一正規化(1nf)中表的每一行只包含乙個例項的資訊。簡而言之,
第一正規化就是無重複的列
。說明:在任何乙個關聯式資料庫中,第一正規化(1nf)是對關係模式的基本要求,不滿足第一正規化(1nf)的資料庫就不是關聯式資料庫。
例如,如下的資料庫表是符合第一正規化的:
欄位1欄位2
欄位3欄位4
而這樣的資料庫表是不符合第一正規化的:
欄位1欄位2
欄位3欄位4
欄位3.1
欄位3.2
資料庫表中的字段都是單一屬性的,不可再分。這個單一屬性由基本型別構成,包括整型、實數、字元型、邏輯型、日期型等。很顯然,在當前的任何關聯式資料庫管理系統(dbms)中,傻瓜也不可能做出不符合第一正規化的資料庫,因為這些dbms不允許你把資料庫表的一列再分成二列或多列。因此,你想在現有的dbms中設計出不符合第一正規化的資料庫都是不可能的。
1.2 第二正規化(2nf)屬性完全依賴於主鍵 [ 消除部分子函式依賴 ]
如果關係模式r為第一正規化,並且r中每乙個非主屬性完全函式依賴於r的某個候選鍵,則稱為第二正規化模式。
第二正規化(2nf)是在第一正規化(1nf)的基礎上建立起來的,即滿足第二正規化(2nf)必須先滿足第一正規化(1nf)。第二正規化(2nf)要求資料庫表中的每個例項或行必須可以被惟一地區分。為實現區分通常需要為表加上乙個列,以儲存各個例項的惟一標識。這個惟一屬性列被稱為主關鍵字或主鍵、主碼。
例如員工資訊表中加上了員工編號(emp_id)列,因為每個員工的員工編號是惟一的,因此每個員工可以被惟一區分。
簡而言之,第二正規化(2nf)就是非主屬性完全依賴於主關鍵字。
所謂完全依賴是指不能存在僅依賴主關鍵字一部分的屬性(設有函式依賴w→a,若存在xw,有x→a成立,那麼稱w→a是區域性依賴,否則就稱w→a是完全函式依賴)。如果存在,那麼這個屬性和主關鍵字的這一部分應該分離出來形成乙個新的實體,新實體與原實體之間是一對多的關係。
假定選課關係表為selectcourse(學號, 姓名, 年齡, 課程名稱, 成績, 學分),關鍵字為組合關鍵字(學號, 課程名稱),因為存在如下決定關係:
(學號, 課程名稱) → (姓名, 年齡, 成績, 學分)
這個資料庫表不滿足第二正規化,因為存在如下決定關係:
(課程名稱) → (學分)
(學號) → (姓名, 年齡)
即存在組合關鍵字中的字段決定非關鍵字的情況。
1.3 第三正規化(3nf)屬性不依賴於其它非主屬性 [ 消除傳遞依賴 ]
如果關係模式r是第二正規化,且每個非主屬性都不傳遞依賴於r的候選鍵,則稱r為第三正規化模式。
滿足第三正規化(3nf)必須先滿足第二正規化(2nf)。第三正規化(3nf)要求乙個資料庫表中不包含已在其它表中已包含的非主關鍵字資訊。
例如,存在乙個部門資訊表,其中每個部門有部門編號(dept_id)、部門名稱、部門簡介等資訊。那麼在的員工資訊表中列出部門編號後就不能再將部門名稱、部門簡介等與部門有關的資訊再加入員工資訊表中。如果不存在部門資訊表,則根據第三正規化(3nf)也應該構建它,否則就會有大量的資料冗餘。
第三正規化(3nf):在第二正規化的基礎上,資料表中如果不存在非關鍵字段對任一候選關鍵字段的傳遞函式依賴則符合第三正規化。簡而言之,第三正規化就是屬性不依賴於其它非主屬性。
所謂傳遞函式依賴,指的是如果存在"a → b → c"的決定關係,則c傳遞函式依賴於a。
因此,滿足第三正規化的資料庫表應該不存在如下依賴關係:
關鍵字段 → 非關鍵字段x → 非關鍵字段y
假定學生關係表為student(學號, 姓名, 年齡, 所在學院, 學院地點, 學院**),關鍵字為單一關鍵字"學號",因為存在如下決定關係:
(學號) → (姓名, 年齡, 所在學院, 學院地點, 學院**)
這個資料庫是符合2nf的,但是不符合3nf,因為存在如下決定關係:
(學號) → (所在學院) → (學院地點, 學院**)
即存在非關鍵字段"學院地點"、"學院**"對關鍵字段"學號"的傳遞函式依賴。
它也會存在資料冗餘、更新異常、插入異常和刪除異常的情況,讀者可自行分析得知。
把學生關係表分為如下兩個表:
學生:(學號, 姓名, 年齡, 所在學院);
學院:(學院, 地點, **)。
這樣的資料庫表是符合第三正規化的,消除了資料冗餘、更新異常、插入異常和刪除異常。
1.4 鮑依斯-科得正規化(bcnf是3nf的改進形式)
若關係模式r是第一正規化,且每個屬性都不傳遞依賴於r的候選鍵。這種關係模式就是bcnf模式。即在第三正規化的基礎上,資料庫表中如果不存在任何欄位對任一候選關鍵字段的傳遞函式依賴則符合鮑依斯-科得正規化。
四種正規化之間存在如下關係:
結論滿足正規化要求的資料庫設計是結構清晰的,同時可避免資料冗餘和操作異常。這並意味著不符合正規化要求的設計一定是錯誤的,在資料庫表中存在1:1或1:n關係這種較特殊的情況下,合併導致的不符合正規化要求反而是合理的。
在我們設計資料庫的時候,一定要時刻考慮正規化的要求。
資料庫規範化
規範化 normalization 是資料庫系統設計中非常重要的乙個技術。資料庫規範化能夠讓資料庫設計者更好地了解組織內部當前的資料結構,最終得到一系列的資料實體。資料庫規範化通過對資料庫表的設計,可以有效降低資料庫冗餘程度。在進行資料庫規範化的時候,我們有一系列的步驟需要遵循。我們把這些步驟稱作正...
資料庫規範化大全
er圖是一種關聯式資料庫邏輯設計的一種方法。normalization 正規化 是另一種 關係型資料庫的邏輯設計的方法。normal forms 正規化 1nf 2nf 3nf bcnf 4nf 5nf 1.不好的資料庫會出現的問題 a.修改異常 anomaly b.刪除異常 c.插入異常 d.資料...
1 2 4 資料庫規範化
資料庫正規化是建立資料庫關係表的規範,遵守正規化的級別越高,能夠讓資料冗餘越少,下一級別的正規化包含上一級別的所有正規化 但是對於特定的的冗餘資料 資料屬性的對應關係不變 能夠提高查詢速度 無需連表查詢 第一正規化 1nf normal form 確保每列原子性 確保每個字段不可再分,下表area可...