下面的圖可能看不懂,你只需要讀懂需求,自己用漢字結合現畫圖,然後就能了解下面的圖是什麼意思了!!!!!!!!!!!
**一、關係資料理論
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...
手機簡訊刪除了怎麼恢復?這個方法一看就明白了!
手機簡訊刪除了怎麼恢復?我們在使用手機的過程中,經常會接收到各類垃圾簡訊,因此有些小夥伴會定期清理一下手機中無用的簡訊內容,但如果在清理的過程中,不小心誤刪了重要的簡訊,又該如何恢復呢?別擔心,下面小編就給你分享一招,一看你就明白了!資料恢復原理 其實簡訊被我們刪除後,並沒有立即從手機中消失,只是會...
想明白再行動 也許就晚了
近來常被學生們追問各種問題,五花八門。問得可愛,答得心甘。大部分人年輕時均如此,人生特定階段的常態 進步最快 最大的一段美好時光。我這等好分享者 貶義些,則可稱為好為人師者 自然以其為樂嘍。欣然問答之餘,覺得一些問題是 想明白再做,還是先做 再想辦法明白 的事情,故此番再贅述一次吧。能想明白了再做,...