先解釋一下涉及到的一些概念,以教務系統為例
函式依賴:
若在一張表中,在屬性(或屬性組)x的值確定的情況下,必定能確定屬性y的值,那麼就可以說y函式依賴於x,寫作 x → y
例如:1:系名 → 系主任
2:學號 → 系主任
3:(學號,課名) → 分數
像如下的關係就不成立
1:學號 → 課名
2:學號 → 分數
完全函式依賴:
在一張表中,若 x → y,且對於 x 的任何乙個真子集(假如屬性組 x 包含超過乙個屬性的話),x ' → y 不成立,那麼我們稱 y 對於 x 完全函式依賴
例如:1:學號 f→ 姓名
2:(學號,課名) f→ 分數
部分函式依賴:
假如 y 函式依賴於 x,但同時 y 並不完全函式依賴於 x,那麼我們就稱 y 部分函式依賴於 x
例如:1:(學號,課名) p→ 姓名
傳遞函式依賴:
假如 z 函式依賴於 y,且 y 函式依賴於 x (y 不包含於 x,且 x 不函式依賴於 y),那麼我們就稱 z 傳遞依賴於 x
碼:
設 k 為某錶中的乙個屬性或屬性組,若除 k 之外的所有屬性都完全函式依賴於 k(這個「完全」不要漏了),那麼我們稱 k 為候選碼,簡稱為碼。
在實際中我們通常可以理解為:假如當 k 確定的情況下,該錶除 k 之外的所有屬性的值也就隨之確定,那麼 k 就是碼。一張表中可以有超過乙個碼。(實際應用中為了方便,通常選擇其中的乙個碼作為主碼)
對於上表,(學號、課名)這個屬性組就是碼。該表中有且僅有這乙個碼。(假設所有課沒有重名的情況)
主屬性:
包含在任何乙個碼中的屬性成為主屬性
第一正規化(1nf):
1nf的定義為:符合1nf的關係中的每個屬性都不可再分
第二正規化(2nf):
2nf在1nf的基礎之上,消除了非主屬性對於碼的部分函式依賴。
判斷方法:
第一步:找出資料表中所有的碼。
第二步:根據第一步所得到的碼,找出所有的主屬性。
第三步:資料表中,除去所有的主屬性,剩下的就都是非主屬性了。
第四步:檢視是否存在非主屬性對碼的部分函式依賴
對於上表,碼只有乙個(學號、課名),則主屬性只有學號和課名,剩餘的屬性都為非主屬性
對於非主屬性姓名來說,存在非主屬性 姓名 對碼(學號,課名)的部分函式依賴,所以上表不滿足第二正規化,將表進行拆分,以滿足第二正規化,結果如下:
第三正規化(3nf) :
3nf在2nf的基礎之上,消除了非主屬性對於碼的傳遞函式依賴,以上述拆分後的結果為例
對於選課表,主碼為(學號,課名),主屬性為學號和課名,非主屬性只有乙個,為分數,不可能存在傳遞函式依賴,所以選課表的設計,符合3nf的要求。
對於學生表,主碼為學號,主屬性為學號,非主屬性為姓名、系名和系主任。因為 學號 → 系名,同時 系名 → 系主任,所以存在非主屬性系主任對於碼學號的傳遞函式依賴,所以學生表的設計,不符合3nf的要求
將上表進行拆分以滿足第三正規化,結果如下:
bcnf正規化:
在 3nf 的基礎上消除主屬性對於碼的部分與傳遞函式依賴
以如下的結構為例:
顯然滿足3nf,但是存在主屬性倉庫名對於碼(管理員,物品名)的部分函式依賴,所以不滿足bc正規化
資料庫 資料庫正規化
關聯式資料庫的設計規範。不同的規範要求被稱為不同的正規化,越高的正規化資料庫冗餘越小。減少資料庫中資料冗餘的過程 1 第一正規化 1nf 在關係模式r中,當且僅當所有屬性只包含原子值,即每個分量都是不可再分的資料項,則稱r滿足1nf。例如表所示的教師職稱情況關係就不滿足1nf。原因在於,該關係模式中...
資料庫正規化 三正規化
所謂第一正規化 1nf 是指在關係模型中,對域新增的乙個規範要求,所有的域都應該是原子性的,即資料庫表的每一列都是不可分割的原子資料項,而不能是集合,陣列,記錄等非原子資料項。即實體中的某個屬性有多個值時,必須拆分為不同的屬性。在符合第一正規化 1nf 表中的每個域值只能是實體的乙個屬性或乙個屬性的...
資料庫正規化
注 表在定義中被稱為關係,記作r 欄位在定義中被稱作屬性 模式 資料庫中有三種模式,外模式,內模式,模式 粗體是關鍵字的意思 斜體為外來鍵 以前寫下來的,但是用了多年的帳號已經忘了,唯有把文章轉到這裡來了 真暈哦 http blog.csdn.net fantasylu archive 2004 0...