資料庫正規化

2021-08-09 15:50:16 字數 3771 閱讀 5980

1nf(first normal form):當且僅當所有域只包含原子值(字段不可分)

2nf(second normal form):當且僅當實體e滿足第一正規化,且每乙個非鍵屬性完全依賴主鍵時(有主鍵,非主鍵依賴主鍵)(非主屬性不能部分依賴於主鍵(eg:只依賴某個主鍵

3nf(third normal form):當且僅當實體e是第二正規化(2nf),且e中沒有非主屬性傳遞依賴時(非主鍵不能相互依賴)

bcnf (主鍵列之間,不存在依賴)

列不可分。每一列都是不可分割的基本資料項。

反例:studyno

name  

***  

contact

20040901     

john        

male     

email:kkkk@ee.net,phone:222456

20040902     

mary        

famale   

email:kkk@fff.netphone:123455

contact欄位可以再分,不符合第一正規化。

正解:studyno

name  

***  

email

phone

20040901     

john        

male     

email:[email protected]

20040902     

mary        

famale   

email:[email protected]

在第一正規化基礎上,對於多關鍵字表,非主屬性不能部分依賴於主鍵(eg:只依賴某個主鍵)

反例:studyno

name  

***  

email

phone

classno

classaddress

20040901    

john        

male     

email:[email protected]

#12a

20040902    

mary       

famale  

email:[email protected]

#8a主鍵是studyno和classno。classaddress部分依賴主鍵classno,需要變為兩個表。

正解:學生表

studyno

name  

***  

email

phone

20040901     

john        

male     

email:[email protected]

20040902     

mary        

famale   

email:[email protected]

教室表classno

classaddress

#12a

#8a優點:消除資料冗餘和增、刪、改異常。

(1) 資料冗餘:同一門課程由n個學生選修,"學分"就重複n-1次;同乙個學生選修了m門課程,姓名和年齡就重複了m-1次。

(2) 更新異常:若調整了某門課程的學分,資料表中所有行的"學分"值都要更新,否則會出現同一門課程學分不同的情況。

(3) 插入異常:假設要開設一門新的課程,暫時還沒有人選修。這樣,由於還沒有"學號"關鍵字,課程名稱和學分也無法記錄入資料庫。

(4) 刪除異常:假設一批學生已經完成課程的選修,這些選修記錄就應該從資料庫表中刪除。但是,與此同時,課程名稱和學分資訊也被刪除了。很顯然,這也會導致插入異常。

在第二正規化基礎上,非主鍵列必須直接依賴於主鍵,不能傳遞依賴。即不能存在:非主鍵列 a 依賴於非主鍵列 b,非主鍵列 b 依賴於主鍵的情況。總之,非主鍵列之間不能存在依賴關係。

反例:studyno

name  

***  

email

phone

bounslevel

bouns

20040901     

john        

male     

email:[email protected]

優秀¥1200

20040902     

mary        

famale   

email:[email protected]

良¥800

主鍵是studyno,只有乙個主鍵studyno,而且符合第二正規化。但是非主鍵列bounslevel和bouns存在依賴關係。

正解:學生表

studyno

name  

***  

email

phone

bounsno

20040901     

john        

male     

email:[email protected]

20040902     

mary        

famale   

email:[email protected]

獎學金等級表

bounsno

bounslevel

bouns

優秀¥1200

良¥800

優點:消除資料冗餘和增、刪、改異常。

在第三正規化的基礎上,資料庫表中如果不存在任何欄位對任一候選關鍵字段的傳遞函式依賴則符合第三正規化。即不存在關鍵字段決定關鍵字段的情況。

反例:storehouseid(倉庫id)

goodsid(商品id)

managerid(管理員id)

goodsnum(商品數量)

主鍵是(倉庫id, 商品id) →(管理員id, 數量) ,(管理員id, 商品id) → (倉庫id, 數量),(倉庫id, 商品id)和(管理員id,商品id)都是候選關鍵字,表中的唯一非關鍵字段為數量。滿足第三正規化。但是,存在關鍵字段決定關鍵字段情況。(倉庫id) → (管理員id)和(管理員id) → (倉庫id)

正解:storehouseid(倉庫id)

goodsid(商品id)

goodsnum(商品數量)

storehouseid(倉庫id)

managerid(管理員id)

優點:消除增、刪、改異常。

(1) 刪除異常:當倉庫被清空後,所有"儲存物品id"和"數量"資訊被刪除的同時,"倉庫id"和"管理員id"資訊也被刪除了。

(2) 插入異常:當倉庫沒有儲存任何物品時,無法給倉庫分配管理員。

(3) 更新異常:如果倉庫換了管理員,則表中所有行的管理員id都要修改。

應用的正規化等級越高,則表越多

表多會帶來很多問題:

1 查詢時需要連線多個表,增加了查詢的複雜度

2 查詢時需要連線多個表,降低了資料庫查詢效能

並不是應用的正規化越高越好,要看實際情況而定。

第三正規化已經很大程度上減少了資料冗餘,並且減少了造成插入異常,更新異常,和刪除異常了。所以大多數情況應用到第三正規化已經足夠。

資料庫 資料庫正規化

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

資料庫正規化 三正規化

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

資料庫正規化

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