做明白這個題就理解了正規化的概念了

2022-04-11 21:05:01 字數 3308 閱讀 2024

下面的圖可能看不懂,你只需要讀懂需求,自己用漢字結合現畫圖,然後就能了解下面的圖是什麼意思了!!!!!!!!!!!

**一、關係資料理論

1. 關係模式

乙個關係模式應當是乙個五元組:r(u, d, dom, f)

(1) r: 關係名;

(2) u: 一組屬性;

(3) d: 屬性組u中屬性所來自的域;

(4) dom: 屬性到域的對映;

(5) f: 屬性組u上的一組資料依賴;

由於(3)、(4)對模式設計關係不大,本章只把關係模式看作是乙個三元組:r,當且僅當u上的乙個關係r滿足f時,r稱為關係模式r的乙個關係。

關係,作為一張二維表,對它有乙個最起碼的要求:每乙個分量必須是不可分的資料項。滿足了這個條件的關係模式就屬於第一正規化(1nf)。

2. 資料依賴

最重要的資料依賴是函式依賴(functional dependency,fd)和多值依賴(multivalued dependency,mvd)。

比如描述乙個學生的關係,可以有學號(sno)、姓名(sname)、系名(sdept)等幾個屬性。由於乙個學號只對應乙個學生,乙個學生只在乙個系學習。因而當「學號」值確定之後,學生的姓名及所在系的值也就唯一地確定了。屬性間的這種依賴關係類似於數學中的函式y=f(x),自變數x確定之後,相應的函式值y也就唯一確定了。

類似的有sname=f(sno),sdept=f(sno),即sno函式決定sname,sno函式決定sdept,或者說sname和sdept函式依賴於sno,記作sno→sname, sno→sdept。

[例1] 現在建立乙個描述學校教務的資料庫,該資料庫涉及的物件包括學生的學號(sno)、所在系(sdept)、系主任姓名(mname)、課程號(cno)和成績(grade)。假設用乙個單一的關係模式student來表示,則該關係模式的屬性集合為:

u=現實世界的已知事實告訴我們:

(1) 乙個系有若干學生,但乙個學生只屬於乙個系

(2) 乙個系只有一名(正職)負責人

(3) 乙個學生可以選修多門課程,每門課程有若干學生選修

(4) 每個學生學習每一門課程有乙個成績

於是得到屬性組u上的一組函式依賴f:f=,如下圖所示:

如果只考慮函式依賴這一種資料依賴,我們就得到了乙個描述學生的關係模式:student。下表是某一時刻關係模式student的乙個例項,即資料表。

但是,這個關係模式存在以下問題:

1. 資料冗餘太大

比如,每乙個系的系主任姓名重複出現,重複次數與該系所有學生的所有課程成績出現次數相同,這將浪費大量儲存空間。

2. 更新異常(update anomalies)

由於資料冗餘,當更新資料庫中的資料時,系統要付出很大的代價來維護資料庫的完整性,否則會面臨資料不一致的危險。比如,某系更換系主任後,必須修改與該系學生有關的每乙個元組。

3. 插入異常(insertion anomalies)

如果乙個系剛成立,尚無學生,就無法把這個系及其系主任的資訊存入資料庫。

4. 刪除異常(deletion anomalies)

如果某個系的學生全部畢業了,在刪除該系學生資訊的同時,把這個系及其系主任的資訊也丟掉了。

鑑於存在以上種種問題,我們可以得出這樣的結論:student關係模式不是乙個好的模式。乙個「好」的模式應當不會發生插入、刪除、更新異常,資料冗餘應盡可能少。為什麼會發生這些問題呢?這是因為這個模式中的函式依賴存在某些不好的性質。假如把這個單一的模式改造一下,分成3個關係模式(即做成3張表)

s(sno, sdept, sno→sdept);

sc(sno, cno, grade, (sno, cno)→grade);

dept(sdept, mname, sdept→mname)

這三個模式都不會發生插入、刪除異常的毛病,資料的冗餘也得到了控制。

3. 正規化(normal formulas)

第一正規化(1nf):在關係模式r中的每乙個具體關係r中,如果每個屬性值都是不可再分的最小資料單位,則稱r是第一正規化的關係。 

第二正規化(2nf):如果關係模式r(u,f)中的所有非主屬性都完全依賴於任意乙個候選關鍵字,則稱關係r 是屬於第二正規化的。

【例】關係模式s-l-c (sno,sdept, sloc, cno, grade)

其中sloc為學生的住處,並且每個系的學生住在同乙個地方。s-l-c的碼為(sno,cno)。函式依賴有:

可以看到非主屬性sdept,sloc並不完全依賴於碼。因此s-l-c不符合2nf。

乙個關係模式不屬於2nf,就會產生以下幾個問題

1) 插入異常。假若要插入乙個學生,但該學生還未選課,即該學生無cno,這樣的元組就插不進s-l-c中。因為插入元組時必須給定碼值,而這時碼值的一部分分為空,因而學生的固有資訊無法插入。

2) 刪除異常。假定某個學生只選一門課,現在這門課不選了,要刪除,由於cno是主屬性,刪除了cno,整個元組就必須跟著刪除,使該學生的資訊也刪除了。

3) 修改複雜。某個學生需要轉系,本來只需修改sdept分量。但因為關係模式s-l-c中還含有系的住處sloc屬性,因此還必須修改元組中的sloc屬性。另外,如果學生修改了k門課程,sdept和sloc重複儲存了k次,造成資料冗餘,而且必須無遺漏地修改k個元組中的全部sdept和sloc資訊,造成修改的複雜化。

原因:分析上面的例子,可以發現問題在於有兩種非主屬性。一種如grade,它對碼是完全函式依賴。另一種如sdept、sloc對碼是不完全函式依賴。

解決辦法:分解單一的關係模式s-l-c變成兩個關係模式。

第三正規化(3nf):如果關係模式r(u,f)中的所有非主屬性對任何候選關鍵字都不存在傳遞依賴,則稱關係r是屬於第三正規化的。

還不懂Redis?看完這個故事就明白了!

你好,我是redis,乙個叫antirez的男人把我帶到了這個世界上。說起我的誕生,跟關聯式資料庫mysql還挺有淵源的。在我還沒來到這個世界上的時候,mysql過的很辛苦,網際網路發展的越來越快,它容納的資料也越來越多,使用者請求也隨之暴漲,而每乙個使用者請求都變成了對它的乙個又乙個讀寫操作,my...

手機簡訊刪除了怎麼恢復?這個方法一看就明白了!

手機簡訊刪除了怎麼恢復?我們在使用手機的過程中,經常會接收到各類垃圾簡訊,因此有些小夥伴會定期清理一下手機中無用的簡訊內容,但如果在清理的過程中,不小心誤刪了重要的簡訊,又該如何恢復呢?別擔心,下面小編就給你分享一招,一看你就明白了!資料恢復原理 其實簡訊被我們刪除後,並沒有立即從手機中消失,只是會...

想明白再行動 也許就晚了

近來常被學生們追問各種問題,五花八門。問得可愛,答得心甘。大部分人年輕時均如此,人生特定階段的常態 進步最快 最大的一段美好時光。我這等好分享者 貶義些,則可稱為好為人師者 自然以其為樂嘍。欣然問答之餘,覺得一些問題是 想明白再做,還是先做 再想辦法明白 的事情,故此番再贅述一次吧。能想明白了再做,...