資料庫正規化

2021-06-29 00:12:19 字數 2362 閱讀 1405

關聯式資料庫中的關係必須滿足一定的要求,即滿足不同的正規化。

越高的正規化資料庫的

冗餘度就越低。

正規化:英文名稱是 normal form,它是英國人 e.f.codd(關聯式資料庫的老祖宗)在上個世紀70年代提出關聯式資料庫模型後總結出來的,正規化是關聯式資料庫理論的基礎,也是我們在設計資料庫結構過程中所要遵循的規則和指導方法。目前有跡可尋的共有8種正規化,依次是:1nf,2nf,3nf,bcnf,4nf,5nf,dknf,6nf。通常所用到的只是前三個正規化,即:第一正規化(1nf),第二正規化(2nf),第三正規化(3nf)。,bcnf下面就簡單介紹下這4個正規化。 

總結:1nf->沒有部分依賴->2nf->沒有傳遞依賴->3nf->所有決定因素都是候選關鍵字->bcnf

◆ 第一正規化(1nf)

:無重複的列(強調的是列的原子性,即列不能夠再分成其他幾列)

考慮這樣乙個表:【聯絡人】(姓名,性別,**) 

如果在實際場景中,乙個聯絡人有家庭**和公司**,那麼這種表結構設計就沒有達到 1nf。要符合 1nf 我們只需把列(**)拆分,即:【聯絡人】(姓名,性別,家庭**,公司**)。

◆ 第二正規化(2nf)

:屬性完全依賴於主鍵(首先是 1nf,另外包含兩部分內容,一是表必須有乙個主鍵;二是沒有包含在主鍵中的列必須完全依賴於主鍵,而不能只依賴於主鍵的一部分 )

考慮乙個訂單明細表:【orderdetail】(orderid,productid,unitprice,discount,quantity,productname)。 

因為我們知道在乙個訂單中可以訂購多種產品,所以單單乙個 orderid 是不足以成為主鍵的,主鍵應該是(orderid,productid)。顯而易見 discount(折扣),quantity(數量)完全依賴(取決)於主鍵(oderid,productid),而 unitprice,productname 只依賴於 productid。所以 orderdetail 表不符合 2nf。不符合 2nf 的設計容易產生冗餘資料。 

可以把【orderdetail】表拆分為【orderdetail】(orderid,productid,discount,quantity)和【product】(productid,unitprice,productname)來消除原訂單表中unitprice,productname多次重複的情況。 

考慮乙個訂單表【order】(orderid,orderdate,customerid,customername,customeraddr,customercity)主鍵是(orderid)。 

其中 orderdate,customerid,customername,customeraddr,customercity 等非主鍵列都完全依賴於主鍵(orderid),所以符合 2nf。不過問題是 customername,customeraddr,customercity 直接依賴的是 customerid(非主鍵列),而不是直接依賴於主鍵,它是通過傳遞才依賴於主鍵,所以不符合 3nf。 

通過拆分【order】為【order】(orderid,orderdate,customerid)和【customer】(customerid,customername,customeraddr,customercity)從而達到 3nf。 

第二正規化(2nf)和第三正規化(3nf)的概念很容易混淆,區分它們的關鍵點在於,2nf:非主鍵列是否完全依賴於主鍵,還是依賴於主鍵的一部分;3nf:非主鍵列是直接依賴於主鍵,還是直接依賴於非主鍵列。

鮑依斯-科得正規化(bcnf是3nf的改進形式)

乙個滿足bcnf的關係模式的條件:

1.所有非主屬性對每乙個碼都是完全函式依賴。

2.所有的主屬性對每乙個不包含它的碼,也是完全函式依賴。

3.沒有任何屬性完全函式依賴於非碼的任何一組屬性。

假設倉庫管理關係表為storehousemanage(倉庫id, 儲存物品id, 管理員id, 數量),且有乙個管理員只在乙個倉庫工作;乙個倉庫可以儲存多種物品。這個資料庫表中存在如下決定關係:

(倉庫id, 儲存物品id) →(管理員id, 數量) 

(管理員id, 儲存物品id) → (倉庫id, 數量) 

所以,(倉庫id, 儲存物品id)和(管理員id, 儲存物品id)都是storehousemanage的候選關鍵字,表中的唯一非關鍵字段為數量,它是符合第三正規化的。但是,由於存在如下決定關係:

(倉庫id) → (管理員id) 

(管理員id) → (倉庫id) 

即存在關鍵字段決定關鍵字段的情況,所以其不符合bcnf正規化。

把倉庫管理關係表分解為二個關係表: 

倉庫管理:storehousemanage(倉庫id, 管理員id); 

倉庫:storehouse(倉庫id, 儲存物品id, 數量)。 

這樣的資料庫表是符合bcnf正規化的。

資料庫 資料庫正規化

關聯式資料庫的設計規範。不同的規範要求被稱為不同的正規化,越高的正規化資料庫冗餘越小。減少資料庫中資料冗餘的過程 1 第一正規化 1nf 在關係模式r中,當且僅當所有屬性只包含原子值,即每個分量都是不可再分的資料項,則稱r滿足1nf。例如表所示的教師職稱情況關係就不滿足1nf。原因在於,該關係模式中...

資料庫正規化 三正規化

所謂第一正規化 1nf 是指在關係模型中,對域新增的乙個規範要求,所有的域都應該是原子性的,即資料庫表的每一列都是不可分割的原子資料項,而不能是集合,陣列,記錄等非原子資料項。即實體中的某個屬性有多個值時,必須拆分為不同的屬性。在符合第一正規化 1nf 表中的每個域值只能是實體的乙個屬性或乙個屬性的...

資料庫正規化

注 表在定義中被稱為關係,記作r 欄位在定義中被稱作屬性 模式 資料庫中有三種模式,外模式,內模式,模式 粗體是關鍵字的意思 斜體為外來鍵 以前寫下來的,但是用了多年的帳號已經忘了,唯有把文章轉到這裡來了 真暈哦 http blog.csdn.net fantasylu archive 2004 0...