看了看第一次機房收費系統的資料庫,感覺存在很多問題,最多的問題就是資料冗餘,所以想在第二次機房的時候把資料庫設計的盡可能完美,正好也是對資料庫考試的乙個總結,首先是對我當時最頭疼的正規化的總結,正規化的作用就是消除資料冗餘、更新異常、插入異常和刪除異常。
1.資料依賴:反映乙個關係內部屬性與屬性之間的約束關係,是現實世界屬性間相互聯絡的抽象,屬於資料內在的性質和語義的體現。
2.規範化理論:是用來設計良好的關係模式的基本理論。它通過分解關係模式來消除其中不合適的資料依賴,以解決插入異常、刪除異常、更新異常和資料冗餘問題。
3.函式依賴(functional dependency fd):簡單地說,對於關係模式的兩個屬性子集x和y,若x的任一取值能唯一確定y的值,則稱y函式依賴於x,記作x→y。
4.非平凡函式依賴:對於關係模式的兩個屬性子集x和y,如果x→y,但y!⊆x,則稱x→y為非平凡函式依賴;如果x→y,但y⊆x,則稱x→y為非平凡函式依賴。
5.完全函式依賴:對於關係模式的兩個屬性子集x和y,如果x→y,並且對於x的任何乙個真子集x',都沒有x'→y,則稱y對x完全函式依賴;如果x→y,但y不完全函式依賴於x,則稱y對x部分函式依賴。
1nf
如果乙個關係模式r的所有屬性都是不可分的基本資料項,則r∈1nf。
資料庫表中的字段都是單一屬性的,不可再分。
不滿足第一正規化就不是關係型資料庫!
2nf
若關係模式r∈1nf,並且每乙個非主屬性都完全函式依賴於r的碼,則r∈2nf
表中的屬性必須完全依賴於全部主鍵,而不是部分主鍵。所以只有乙個主鍵的表如果符合第一正規化,那一定是第二正規化。
3nf在第二正規化的基礎上,資料表中如果不存在非關鍵字段對任一候選關鍵字段的傳遞函式依賴則符合第三正規化。
所謂傳遞函式依賴,指的是如果存在"a → b → c"的決定關係,則c傳遞函式依賴於a。
bcnf(鮑依斯-科得正規化)
在第三正規化的基礎上,資料庫表中如果不存在任何欄位對任一候選關鍵字段的傳遞函式依賴則符合bc正規化。
應用資料庫正規化可以帶來許多好處,但是最重要的好處歸結為三點:
1.減少資料冗餘(這是最主要的好處,其他好處都是由此而附帶的)
2.消除異常(插入異常,更新異常,刪除異常)
資料庫表中不存在非關鍵字段對任一候選關鍵字段的部分函式依賴(部分函式依賴指的是存在組合關鍵字中的某些字段決定非關鍵字段的情況),也即所有非關鍵字段都完全依賴於任意一組候選關鍵字。
假定選課關係表為selectcourse(學號, 姓名, 年齡, 課程名稱, 成績, 學分),關鍵字為組合關鍵字(學號, 課程名稱),因為存在如下依賴關係:
(學號, 課程名稱) → (姓名, 年齡, 成績, 學分)
這個資料庫表不滿足第二正規化,因為存在如下依賴關係:
(課程名稱) → (學分)
(學號) → (姓名, 年齡)
即存在組合關鍵字中的字段決定非關鍵字的情況。
由於不符合2nf,這個選課關係表會存在如下問題:
(1) 資料冗餘:
同一門課程由n個學生選修,"學分"就重複n-1次;同乙個學生選修了m門課程,姓名和年齡就重複了m-1次。
(2) 更新異常:
若調整了某門課程的學分,資料表中所有行的"學分"值都要更新,否則會出現同一門課程學分不同的情況。
(3) 插入異常:
假設要開設一門新的課程,暫時還沒有人選修。這樣,由於還沒有"學號"關鍵字,課程名稱和學分也無法記錄入資料庫。
(4) 刪除異常:
假設一批學生已經完成課程的選修,這些選修記錄就應該從資料庫表中刪除。但是,與此同時,課程名稱和學分資訊也被刪除了。很顯然,這也會導致插入異常。把選課關係表selectcourse改為如下三個表:
學生:student(學號, 姓名, 年齡);
課程:course(課程名稱, 學分);
選課關係:selectcourse(學號, 課程名稱, 成績)。
這樣的資料庫表是符合第二正規化的,消除了資料冗餘、更新異常、插入異常和刪除異常。
另外,所有單關鍵字的資料庫表都符合第二正規化,因為不可能存在組合關鍵字。
在第二正規化的基礎上,資料表中如果不存在非關鍵字段對任一候選關鍵字段的傳遞函式依賴則符合第三正規化。所謂傳遞函式依賴,指的是如果存在"a → b → c"的決定關係,則c傳遞函式依賴於a。因此,滿足第三正規化的資料庫表應該不存在如下依賴關係:
關鍵字段 → 非關鍵字段x → 非關鍵字段y
假定學生關係表為student(學號, 姓名, 年齡, 所在學院, 學院地點, 學院**),關鍵字為單一關鍵字"學號",因為存在如下決定關係:
(學號) → (姓名, 年齡, 所在學院, 學院地點, 學院**)
這個資料庫是符合2nf的,但是不符合3nf,因為存在如下決定關係:
(學號) → (所在學院) → (學院地點, 學院**)
即存在非關鍵字段"學院地點"、"學院**"對關鍵字段"學號"的傳遞函式依賴。
它也會存在資料冗餘、更新異常、插入異常和刪除異常的情況,讀者可自行分析得知。
把學生關係表分為如下兩個表:
學生:(學號, 姓名, 年齡, 所在學院);
學院:(學院, 地點, **)。
這樣的資料庫表是符合第三正規化的,消除了資料冗餘、更新異常、插入異常和刪除異常。
小結:自考雖然考完了,但是還是需要總結的,不僅僅是對知識的梳理,更是對即將到來的機房重構打良好的基礎。希望指出不足之處!
自學考試 資料結構
1.帶頭結點的單迴圈鍊錶的頭指標為head,則判斷該鍊錶是否為空的條件是head next head 2.不需要判斷棧是否為空的是 進棧 3.對於任意一棵二叉樹,如果其葉結點數為n0,而度數為2的結點總數為n2,則n0 n2 1 4.m個葉結點的哈夫曼樹中,其結點總數為2m 1 5.用n表示圖中頂點...
資料庫 正規化解析
1.第一正規化 1nf 第一正規化是指資料庫表中的每一列都是不可分割的基本資料項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重複的屬性。下面看例子 學生資訊表,每乙個屬性都只有乙個值,比如屬性 每個 字段只有乙個值,每一條記錄裡,每乙個屬性只有乙個值而且不會有兩個。每乙個欄位也不...
資料庫三正規化解析
在資料庫的建立過程中需要考慮很多規則,乙個良好的資料庫設計不但要節省資料的儲存空間,方便進行資料庫應用程式的開發,而且能夠保證資料的完整性。定義乙個良好的資料庫需要這麼多的規則,那我們設計時豈不更讓人頭疼。所以為了能夠建立乙個好的資料庫在開發時就必須保證資料庫的規範化 三大正規化。為了建立冗餘較小,...