(1)1nf-無重複的列
資料庫表的每一列都是不可分割的基本資料項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重複的屬性。
如果出現重複的屬性,就可能需要定義乙個新的實體,新的實體由重複的屬性構成,新實體與原實體之間為一對多關係。在第一正規化(1nf)中表的每一行只包含乙個例項的資訊。簡而言之,第一正規化就是無重複的列。
說明:在任何乙個關聯式資料庫中,第一正規化(1nf)是對關係模式的基本要求,不滿足第一正規化(1nf)的資料庫就不是關聯式資料庫。
(2)2nf-部分依賴
非主屬性完全依賴於主鍵[消除非主屬性對主碼的部分函式依賴]。
第二正規化(2nf)是在第一正規化(1nf)的基礎上建立起來的,即滿足第二正規化(2nf)必須先滿足第一正規化(1nf)。第二正規化(2nf)要求資料庫表中的每個例項或行必須可以被唯一地區分。為實現區分通常需要為表加上乙個列,以儲存各個例項的唯一標識。例如員工資訊表中加上了員工編號(emp_id)列,因為每個員工的員工編號是唯一的,因此每個員工可以被唯一區分。這個唯一屬性列被稱為主關鍵字或主鍵、主碼。
第二正規化(2nf)要求實體的屬性完全依賴於主關鍵字。所謂完全依賴是指不能存在僅依賴主關鍵字一部分的屬性,如果存在,那麼這個屬性和主關鍵字的這一部分應該分離出來形成乙個新的實體,新實體與原實體之間是一對多的關係。為實現區分通常需要為表加上乙個列,以儲存各個例項的唯一標識。簡而言之,第二正規化就是屬性完全依賴於主鍵。
(3)3nf-傳遞依賴
屬性不依賴於其它非主屬性[消除傳遞依賴]。
滿足第三正規化(3nf)必須先滿足第二正規化(2nf)。簡而言之,第三正規化(3nf)要求乙個資料庫表中不包含已在其它表中已包含的非主關鍵字資訊。例如,存在乙個部門資訊表,其中每個部門有部門編號(dept_id)、部門名稱、部門簡介等資訊。那麼在的員工資訊表中列出部門編號後就不能再將部門名稱、部門簡介等與部門有關的資訊再加入員工資訊表中。如果不存在部門資訊表,則根據第三正規化(3nf)也應該構建它,否則就會有大量的資料冗餘。簡而言之,第三正規化就是屬性不依賴於其它非主屬性。
三、例項
下面以乙個學校的學生系統為例分析說明,這幾個正規化的應用。首先第一正規化(1nf):資料庫表中的字段都是單一屬性的,不可再分。這個單一屬性由基本型別構成,包括整型、實數、字元型、邏輯型、日期型等。在當前的任何關聯式資料庫管理系統(dbms)中,傻瓜也不可能做出不符合第一正規化的資料庫,因為這些dbms不允許你把資料庫表的一列再分成二列或多列。因此,你想在現有的dbms中設計出不符合第一正規化的資料庫都是不可能的。
首先我們確定一下要設計的內容包括那些。學號、學生姓名、年齡、性別、課程、課程學分、系別、學科成績,系辦位址、系辦**等資訊。為了簡單我們暫時只考慮這些字段資訊。我們對於這些資訊,說關心的問題有如下幾個方面。
學生有那些基本資訊
學生選了那些課,成績是什麼
每個課的學分是多少
學生屬於那個系,系的基本資訊是什麼。
3.1 第二正規化(2nf)例項分析
首先我們考慮,把所有這些資訊放到乙個表中(學號,學生姓名、年齡、性別、課程、課程學分、系別、學科成績,系辦位址、系辦**)下面存在如下的依賴關係。
問題分析
因此不滿足第二正規化的要求,會產生如下問題
資料冗餘: 同一門課程由n個學生選修,」學分」就重複n-1次;同乙個學生選修了m門課程,姓名和年齡就重複了m-1次。
更新異常:
1)若調整了某門課程的學分,資料表中所有行的」學分」值都要更新,否則會出現同一門課程學分不同的情況。
2)假設要開設一門新的課程,暫時還沒有人選修。這樣,由於還沒有」學號」關鍵字,課程名稱和學分也無法記錄入資料庫。
刪除異常 : 假設一批學生已經完成課程的選修,這些選修記錄就應該從資料庫表中刪除。但是,與此同時,課程名稱和學分資訊也被刪除了。很顯然,這也會導致插入異常。
解決方案
把選課關係表selectcourse改為如下三個表:
課程:course(課程名稱, 學分);
選課關係:selectcourse(學號, 課程名稱, 成績)。
3.2第三正規化(3nf)例項分析
(學號)→ (姓名, 年齡,性別,系別,系辦位址、系辦**)
但是還存在下面的決定關係
(學號) → (所在學院)→(學院地點, 學院**)
即存在非關鍵字段」學院地點」、」學院**」對關鍵字段」學號」的傳遞函式依賴。
它也會存在資料冗餘、更新異常、插入異常和刪除異常的情況。 (資料的更新,刪除異常這裡就不分析了,可以參照2.1.1進行分析)
根據第三正規化把學生關係表分為如下兩個表就可以滿足第三正規化了:
學生:(學號, 姓名, 年齡, 性別,系別);
資料倉儲之父immon的方法從全企業的高度設計乙個3nf模型,用實體加關係描述的資料模型描述企業業務架構,在正規化理論上符合3nf,它與oltp系統中的3nf的區別,在於資料倉儲中的3nf上站在企業角度面向主題的抽象,而不是針對某個具體業務流程的實體物件關係抽象,它更多的是面向資料的整合和一致性治理,正如immon所希望達到的:「single version of the truth」。
但是要採用此方法進行構建,也有其挑戰:
資料庫 第三正規化(3NF)
第三正規化的表需要滿足以下條件 create table customers cust id int not null,cust name varchar 20 not null,dob date,street varchar 200 city varchar 100 state varchar 1...
資料庫複習 3NF分解演算法
輸入 關係r和其上成立的函式依賴集f。輸出 又r分解出的關係集合,其中每個關係均屬於3nf。分解具有無損鏈結和依賴保持性質。方法 依次執行下列步驟 找出f的乙個最小基本集,記為g。對於g中的每乙個fd x a,將xa作為分解出的某個關係的模式。如果第2步分解出的關係的模式均不包含r的超鍵,則增加乙個...
星型模型 3nf的區別 漳州電力與電網模型沙盤公司
漳州電力與電網模型沙盤公司 jewd9rw 漳州電力與電網模型沙盤公司 材質有金屬 塑料 陶瓷 木材 橡膠 紙張 皮革等,而金屬又分為鋼鐵 鋁 銅 鋅及其合金等,同一種塗料對於塗佈物材質的不同,所得到的效果也不盡相同。當然戶型模型也是要裝飾的,好比一套裝好的房子一樣,這樣才會讓購買者更有購買,它們的...