簡單的說,
第一正規化就是原子性,字段不可再分割;
第二正規化就是屬性完全依賴於主鍵,沒有部分依賴;
第三正規化就是沒有傳遞依賴,屬性不依賴於其它非主屬性。
1nf的定義為:符合1nf的關係中的每個屬性都不可再分。下表所示的情況,就不符合1nf的要求。
1nf是所有關係型資料庫的最基本要求,也就是說,只要在rdbms中已經存在的資料表,一定是符合1nf的。如下表所示:
2nf的定義為:在1nf的基礎之上,消除了非主屬性對於碼的部分函式依賴。例如: 對於下僅僅符合1nf的下表
仍會存在一些問題:
資料冗餘過大:學號、姓名、系名、系主任這些資料重複多次。每個系與對應的系主任的資料也重複多次
插入異常:假如學校3月份新建了乙個系,等到8月份才招生,那麼無法將系名與系主任的資料單獨地新增到資料表中去
刪除異常:假如將某個系中所有學生相關的記錄都刪除,那麼所有系與系主任的資料也就隨之消失了
修改異常:假如李小明轉系到法律系,那麼為了保證資料庫中資料的一致性,需要修改三條記錄中系與系主任的資料
改進後如下:
3nf的定義為:在2nf的基礎之上,消除了非主屬性對於碼的傳遞函式依賴。
僅僅符合2nf的要求,很多情況下還是不夠的,原因在於仍然存在非主屬性(系主任)對於碼(學號)的傳遞函式依賴。改進後如下:
改進:
刪除某個系中所有的學生記錄,該系的資訊不會丟失。
插入乙個尚無學生的新系的資訊。因為係表與學生表目前是獨立的兩張表,所以不影響。
資料冗餘更加少了。
以上已經表達了三種正規化的差別。 下面再從函式關係依賴說明,1nf -> 2nf -> 3nf 逐步規範的過程:
1. 函式依賴:若在一張表中,在屬性(或屬性組)x的值確定的情況下,必定能確定屬性y的值,那麼就可以說y函式依賴於x,寫作 x → y。
例如: 系名 → 系主任, (學號,課名) → 分數
2. 完全函式依賴:在一張表中,若 x → y,且對於 x 的任何乙個真子集(假如屬性組 x 包含超過乙個屬性的話),x ' → y 不成立,那麼我們稱 y 對於 x 完全函式依賴,記作:
例如: 學號 f→ 姓名, (學號,課名) f→ 分數 (f在箭頭上邊。。。)
3.部分函式依賴:假如 y 函式依賴於 x,但同時 y 並不完全函式依賴於 x,那麼我們就稱 y 部分函式依賴於 x,
記作例如: (學號,課名) p→ 姓名 (p在箭頭上邊。。。)
4.傳遞函式依賴:假如 z 函式依賴於 y,且 y 函式依賴於 x (嚴格來說還有乙個x 不包含於y,且 y 不函式依賴於z的前提條件),那麼我們就稱 z 傳遞函式依賴於 x ,
記作5. 碼: 設 k 為某錶中的乙個屬性或屬性組,若除 k 之外的所有屬性都完全函式依賴於 k,那麼我們稱 k 為候選碼,簡稱為碼。
一張表中可以有超過乙個碼。通常選擇其中的乙個碼作為主碼。
例如:(學號、課名)這個屬性組就是碼。 我們可以理解為:假如當 k 確定的情況下,該錶除 k 之外的所有屬性的值也就隨之確定,那麼 k 就是碼。
已知關係模式r(a, b, c, d, e)及其上的函式依賴集f= , 求滿足3nf的關係模式。
a. {ab, bcd, ade}
b. {ce, de, bcd,acd}
c. {ac, bd,acd,de}
d. {ade, ac, cd, bc}
因為a->d, e->d,故ade是有傳遞依賴,不符合3nf, 所以選項a,d不對;
因為拆出來的表裡要麼全是主鍵,要麼必須存在依賴關係,而ac沒有依賴關係,且ac也不是候選碼,所以c不對;
答案是b。
ref:
關聯式資料庫三正規化
正規化就是規範,就是關係型資料庫在設計表時,要遵循的三個規範。要想滿足第二正規化必須先滿足第一正規化,要滿足第三正規化必須先滿足第二正規化。第一正規化 1nf 是指資料庫表的每一列都是不可分割的基本資料項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重複的屬性。列資料的不可分割第二...
關聯式資料庫的三正規化
關聯式資料庫的三正規化 1 第一正規化 1nf 同一列不能儲存多個屬性 應保持列的原子性 在任何乙個關聯式資料庫中,第一正規化 1nf 是對關係模式的基本要求,不滿足第一正規化 1nf 的資料庫就不是關聯式資料庫。所謂第一正規化 1nf 是指資料庫表的每一列都是不可分割的基本資料項,同一列中不能有多...
關聯式資料庫正規化
在建立乙個資料庫的過程中,必須依照一定的準則,這些準則被稱為正規化,從第一到第六共六個正規化,一般資料庫設計只要遵循第一正規化,第二正規化,和第三正規化就足夠了。滿足這些規範的資料庫是簡潔的 結構明晰的,同時,不會發生插入 insert 刪除 delete 和更新 update 操作異常。反之則是亂...