什麼是正規化
一張資料表的表結構所符合的某種設計標準的級別
主屬性非主屬性
1 第1正規化 每個屬性必定不能再分
錯誤例子:
編號 品名 進貨(數量|單價) 銷售(數量|單價) 備註
修改後:
編號 品名 進貨數理 進貨單價 銷售數量 銷售單價 備註
2 第2正規化 2nf在1nf的基礎之上,消除了非主屬性對於碼的部分函式依賴
錯誤例子:學號 姓名 系名 系主任 課名 分數
資料冗餘過大
新建系如何暫時沒有招生,就在資料庫建立不了資料進入資料庫內-新增異常
學生畢業後刪除記錄,連系主任都會被刪除-刪除異常
某學生轉系,哪麼多條記錄中與系主任相關的記錄會被修改-修改異常
函式依賴:
系名->系主任
學號->系主任
(學號,課名)->分數
不成立的函式依賴:
學號->課名
學號->分數
課名->系主任
(學號,課名)->姓名 //仔細想課名是決定不了姓名的,一點關係都沒有
函式依賴三種型別(完全函式依賴,部分函式依賴,傳遞函式依賴)
完全函式依賴
在一張表中,若x->y,x中的任何乙個真子集,都無法確定y,但其全集可以確定,這個就記作xf->y
eg:學號f-> 姓名
(學號,課名)f->分數 學號或者課名都不能單獨確定分數
部分函式依賴
假如y函式依賴於x,但同時y並不完全函式依賴於x,記作x p->y
eg:(學號,課名) p->姓名
也就是說碼存在兩個主屬性以上的時候,才可能會出現非主屬性對碼的部分函式依賴
傳遞函式依賴
如果z函式依賴於y,且y函式依賴於x,x不依賴於y,那麼就記作x t-z
叫z傳遞函式依賴於x。
也就是說碼和非主屬性存在2個以上的時候,才可能會出現非主屬性對碼的傳遞函式依賴
碼設k為某錶中的乙個屬性或屬性組,若除k之外的所有屬性都完全函式依賴於k,稱k為碼。
主屬性包含在任何乙個碼中的屬性成為主屬性
如:學號與課名組成的碼,它們兩分別為主屬性
判斷是否符合2nf步驟:
1 找出所有的碼
2 根據第1步的碼,找出所有的主屬性
3 在資料表中,除去所有的主屬性,剩下的就都是非主屬性
4 檢視是否存在非主屬性對碼的部分函式依賴
eg,使用上面2nf的錯誤表結構,
訣竅:如果a是碼,哪麼所有包含了a的屬性組都不會是碼了,因為作為碼的要求裡有乙個「完全函式依賴」,把屬性全部列出來,連線
第一步: 碼是(學號,課程)
第二步:主屬性:學號與課名
第三步:非主屬性:姓名,系名,系主任,分數
第四步:(學號,課名)->姓名 ,學號->姓名, 所以(學號,課名)p->姓名
(學號,課名)->系名,學號->系名,所以(學號,課名)p->系名
(學號,課名)->系主任,學號->系主任,所以(學號,課名)p->系名
解決方案:將大資料表拆分成兩個或者更多個更小的資料表,
3 第3正規化 3nf在2nf的基礎之上,消除了非主屬性對於碼的傳遞函式依賴
在2nf的基礎上:產生三張新錶
表1 選課 (學號 課名 分數)
表2 學生 (學號 姓名 系名)
表3 系 (系名,系主任)
bcnf正規化 解偶用的,重點觀察插入和刪除的時候,屬性對應的資料會出現哪些異常
eg:實體(倉庫名,管理員,物品名,數量)
主屬性:倉庫名,管理員,物品名
碼:(管理員,物品名),(倉庫名,物品名)
主屬性不能為空,刪除資料,倉庫名和管理員會被刪除,更改管理員,所以物品的記錄會被更新
,所以得出乙個結論,即使滿足3nf,也可能存在插入,刪除,修改異常。
原因是什麼?存在主屬性對於碼的部分函式依賴與傳遞函式依賴,主屬性(倉庫名)對於碼(管理員,物品名)的部分函式依賴
解決辦法:在3nf的基礎上消除主屬性對於碼的部分與傳遞函式依賴
資料庫 四種正規化
部分函式依賴 設x,y是關係r的兩個屬性集合,存在x y,若x 是x的真子集,存在x y,則稱y部分函式依賴於x。舉個例子 學生基本資訊表r中 學號,身份證號,姓名 當然學號屬性取值是唯一的,在r關係中,學號,身份證號 姓名 學號 姓名 身份證號 姓名 所以姓名部分函式依賴與 學號,身份證號 完全函...
關聯式資料庫正規化
在建立乙個資料庫的過程中,必須依照一定的準則,這些準則被稱為正規化,從第一到第六共六個正規化,一般資料庫設計只要遵循第一正規化,第二正規化,和第三正規化就足夠了。滿足這些規範的資料庫是簡潔的 結構明晰的,同時,不會發生插入 insert 刪除 delete 和更新 update 操作異常。反之則是亂...
關聯式資料庫正規化
判斷是第幾正規化 概念 設計關聯式資料庫時,遵從不同的規範要求,設計出合理的關係型資料庫,這些不同的規範要求被稱為不同的正規化,各種正規化呈遞次規範,越高的正規化資料庫冗餘越小。種類 目前關聯式資料庫有六種正規化 第一正規化 1nf 第二正規化 2nf 第三正規化 3nf 巴斯 科德正規化 bcnf...