在任何乙個關係型資料庫中,第一正規化(1nf)是對關係模式的基本要求,不滿足第一正規化的資料庫不是關聯式資料庫。
那麼何為第一正規化呢?
第一正規化就是指資料表中的每一列都是不可分割的基本資料項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重複的屬性。
如果出現重複的屬性,就可能需要定義乙個新的實體,新的實體有重複的屬性構成,新實體與原實體之間為一對多的關係。簡而言之,第一正規化就是無重複的列。
第二正規化是在第一正規化的基礎上建立起來的,既滿足第二正規化必須先滿足第一正規化。第二正規化要求資料庫表中的每個例項或行必須可以被唯一的區分。為實現區分通常需要為表加乙個列,以儲存各個例項的唯一標識。這個唯一的屬性被稱為主鍵。
第二正規化要求實體的屬性完全依賴於主鍵。所謂完全依賴就是指不能存在僅依賴主鍵一部分的屬性,如果存在,那麼這個屬性和主鍵的這一部分應該分離出來形成乙個新的實體,新實體與原實體之間是一對多的關係。簡而言之,第二正規化就是非主屬性非部分依賴於主鍵。
滿足第三正規化必須先滿足第二正規化。
就是說第三正規化要求乙個資料庫表中不包含已在其他表中已包含的非主鍵的資訊。
例如,存在乙個部門資訊表,其中每個部門有部門編號(dept_id)、部門名稱、部門簡介等資訊。
那麼在員工資訊表中列出部門編號後就不能再將部門名稱、部門簡介等與部門有關的資訊再加入員工資訊表中。
如果不存在部門資訊表,則根據第三正規化(3nf)也應該構建它,否則就會有大量的資料冗餘。
簡而言之,第三正規化就是屬性不依賴於其它非主屬性。
資料庫表中的字段都是單一屬性的,不可再分。
這個單一屬性由基本型別構成,包括整型、實數、字元型、邏輯型、日期型等。
例如,如下的資料庫表是符合第一正規化的:
欄位1 欄位2 欄位3 欄位4
而這樣的資料庫表是不符合第一正規化的:
欄位1 欄位2 欄位3 欄位4
欄位3.1 欄位3.2
資料庫表中不存在非關鍵字段對任一候選關鍵字段的部分函式依賴,也即所有非關鍵字段都完全依賴於任意一組候選關鍵字。
假定選課關係表為selectcourse(學號, 姓名, 年齡, 課程名稱, 成績, 學分),關鍵字為組合關鍵字(學號, 課程名稱),因為存在如下決定關係:
(學號, 課程名稱) → (姓名, 年齡, 成績, 學分)
這個資料庫表不滿足第二正規化,因為存在如下決定關係:
(課程名稱) → (學分)
(學號) → (姓名, 年齡)
即存在組合關鍵字中的字段決定非關鍵字的情況。
由於不符合2nf,這個選課關係表會存在如下問題:
(1) 資料冗餘:
同一門課程由n個學生選修,」學分」就重複n-1次;同乙個學生選修了m門課程,姓名和年齡就重複了m-1次。
(2) 更新異常:
若調整了某門課程的學分,資料表中所有行的」學分」值都要更新,否則會出現同一門課程學分不同的情況。
(3) 插入異常:
假設要開設一門新的課程,暫時還沒有人選修。這樣,由於還沒有」學號」關鍵字,課程名稱和學分也無法記錄入資料庫。
(4) 刪除異常:
假設一批學生已經完成課程的選修,這些選修記錄就應該從資料庫表中刪除。但是,與此同時,課程名稱和學分資訊也被刪除了。很顯然,這也會導致插入異常。
把選課關係表selectcourse改為如下三個表:
學生:student(學號, 姓名, 年齡);
課程:course(課程名稱, 學分);
選課關係:selectcourse(學號, 課程名稱, 成績)。
這樣的資料庫表是符合第二正規化的, 消除了資料冗餘、更新異常、插入異常和刪除異常。
另外,所有單關鍵字的資料庫表都符合第二正規化,因為不可能存在組合關鍵字。
在第二正規化的基礎上,資料表中如果不存在非關鍵字段對任一候選關鍵字段的傳遞函式依賴則符合第三正規化。所謂傳遞函式依賴,指的是如果存在」a → b → c」的決定關係,則c傳遞函式依賴於a。因此,滿足第三正規化的資料庫表應該不存在如下依賴關係:
關鍵字段 → 非關鍵字段x → 非關鍵字段y
假定學生關係表為student(學號, 姓名, 年齡, 所在學院, 學院地點, 學院**),關鍵字為單一關鍵字」學號」,因為存在如下決定關係:
(學號) → (姓名, 年齡, 所在學院, 學院地點, 學院**)
這個資料庫是符合2nf的,但是不符合3nf,因為存在如下決定關係:
(學號) → (所在學院) → (學院地點, 學院**)
即存在非關鍵字段」學院地點」、」學院**」對關鍵字段」學號」的傳遞函式依賴。
它也會存在資料冗餘、更新異常、插入異常和刪除異常的情況。
把學生關係表分為如下兩個表:
學生:(學號, 姓名, 年齡, 所在學院);
學院:(學院, 地點, **)。
這樣的資料庫表是符合第三正規化的,消除了資料冗餘、更新異常、插入異常和刪除異常。
資料庫設計三大正規化資料庫設計三大正規化
為了建立冗餘較小 結構合理的資料庫,設計資料庫時必須遵循一定的規則。在關係型資料庫中這種規則就稱為正規化。正規化是符合某一種設計要求的總結。要想設計乙個結構合理的關係型資料庫,必須滿足一定的正規化。在實際開發中最為常見的設計正規化有三個 1 第一正規化 確保每列保持原子性 第一正規化是最基本的正規化...
資料庫三大正規化
1 第一正規化 1nf 在任何乙個關聯式資料庫中,第一正規化 1nf 是對關係模式的基本要求,不滿足第一正規化 1nf 的資料庫就不是關聯式資料庫。所謂第一正規化 1nf 是指資料庫表的每一列都是不可分割的基本資料項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重複的屬性。如果出現...
資料庫三大正規化
第一正規化 確保每列的原子性.如果每列 或者每個屬性 都是不可再分的最小資料單元 也稱為最小的原子單元 則滿足第一正規化.例如 顧客表 姓名 編號 位址 其中 位址 列還可以細分為國家 省 市 區等。第二正規化 在第一正規化的基礎上更進一層,目標是確保表中的每列都和主鍵相關.如果乙個關係滿足第一正規...