正規化分類:1nf,2nf,3nf,bcnf,4nf
1,第一正規化
資料庫表中的字段都是單一屬性的,不可再分。這個單一屬性由基本型別構成,包括整型、實數、字元型、邏輯型、日期型等。
它只是一些屬性的堆積,但是每個是不能再分的。
2,第二正規化
在第一正規化的基礎上,第二正規化要求資料庫表中的每個例項或行必須可以被惟一地區分。為實現區分通常需要為表加上乙個列,以儲存各個例項的惟一標識。員工資訊表中加上了員工編號(emp_id)列,因為每個員工的員工編號是惟一的,因此每個員工可以被惟一區分。這個惟一屬性列被稱為主關鍵字或主鍵、主碼。
3,第三正規化
用定義來描述就是:
關係模式r中若不存在這樣的碼x,屬性組y及非主屬性z(z≮y)使得x->y,y->z成立,y!->x,則稱r∈3nf.
這樣理解確實有點費解,那麼我們用乙個實際的例子來說明即可.
假定學生關係表為sn(學號, 姓名, 年齡, 所在學院, 學院地點, 學院**),關鍵字為單一關鍵字"學號",因為存在如下決定關係:
(學號) → (姓名, 年齡, 所在學院, 學院地點, 學院**)
這個資料庫是符合2nf的,但是不符合3nf,因為存在如下決定關係:
(學號) → (所在學院) → (學院地點, 學院**)
即存在非關鍵字段"學院地點"、"學院**"對關鍵字段"學號"的傳遞函式依賴。
它也會存在資料冗餘、更新異常、插入異常和刪除異常的情況,讀者可自行分析得知。
把學生關係表分為如下兩個表:
學生:(學號, 姓名, 年齡, 所在學院);
學院:(學院, 地點, **)。
這樣的資料庫表是符合第三正規化的,消除了資料冗餘、更新異常、插入異常和刪除異常。
4,bc正規化
bcnf(boyce codd normal form)是由boyce與codd提出的,比3nf又進了一步,通常認為bcnf是修正的第三正規化,有時也成為擴充的第三正規化。
定義:所謂第三正規化,定義是關係模式r中若不存在這樣的碼x,屬性組y及非主屬性z,使得x—>y,y—>z成立,(不存在y—>x),則稱r為3nf.
例項理解:
假設倉庫管理關係表為storehousemanage(倉庫id, 儲存物品id, 管理員id, 數量),且有乙個管理員只在乙個倉庫工作;乙個倉庫可以儲存多種物品。這個資料庫表中存在如下決定關係:
(倉庫id, 儲存物品id) →(管理員id, 數量)
(管理員id, 儲存物品id) → (倉庫id, 數量)
所以,(倉庫id, 儲存物品id)和(管理員id, 儲存物品id)都是storehousemanage的候選關鍵字,表中的唯一非關鍵字段為數量,它是符合第三正規化的。但是,由於存在如下決定關係:
(倉庫id) → (管理員id)
(管理員id) → (倉庫id)
即存在關鍵字段決定關鍵字段的情況,所以其不符合bcnf正規化。它會出現如下異常情況:
(1) 刪除異常:
當倉庫被清空後,所有"儲存物品id"和"數量"資訊被刪除的同時,"倉庫id"和"管理員id"資訊也被刪除了。
(2) 插入異常:
當倉庫沒有儲存任何物品時,無法給倉庫分配管理員。
(3) 更新異常:
如果倉庫換了管理員,則表中所有行的管理員id都要修改。
把倉庫管理關係表分解為二個關係表:
倉庫管理:storehousemanage(倉庫id, 管理員id);
倉庫:storehouse(倉庫id, 儲存物品id, 數量)。
這樣的資料庫表是符合bcnf正規化的,消除了刪除異常、插入異常和更新異常。
5,第四正規化
待續。
資料庫正規化理解
當前我們使用的主流資料庫是關係型資料庫,所以我是記錄在關係型資料庫中對正規化的一些理解和看法。資料庫庫正規化分為六種 其實還有有乙個bcnf 分別為從第一正規化到第六正規化。高階一層是建立在所有低層的基礎上的,如第2正規化是建立在第一正規化的基礎上的,依次類推。下面分別舉例講解各種正規化 第一正規化...
資料庫正規化的理解
就是滿足了單一屬性不能再分割,正常情況下,你在資料庫裡建立的表肯定是滿足這個正規化的,要想不滿足這個正規化,可以在excel中嘗試合併單元格,拆分單元格體會下,就明白了。2nf 必須不存在非關鍵字段對組合的關鍵字段中的某些的依賴,比如某個表有 個關鍵字,但是它的非關鍵屬性 依賴第乙個關鍵字,非關鍵屬...
資料庫正規化的理解
資料庫表中的字段都是單一屬性的,不可再分。這個單一屬性由基本型別構成,包括整型 實數 字元型 邏輯型 日期型等。在當前的任何關聯式資料庫管理系統 dbms 中,傻瓜也不可能做出不符合第一正規化的資料庫,因為這些dbms不允許你把資料庫表的一列再分成二列或多列。因此,你想在現有的dbms中設計出不符合...