8.1問題的提出
資料庫邏輯設計的乙個強有力的工具--關聯式資料庫的規範化理論。
乙個關係既可以用來描述乙個實體及其屬性,又可以用來描述實體間的聯絡。
關係模式是用來定義關係的。
乙個資料庫包含一組關係,定義這些關係的關係模式的全體就構成了該資料庫的模式,建成模式scheme。
資料依賴指資料間的相互關聯(主要體現於值的是否相等)。
關係模式應當是乙個五元組:
r(1)關係名r它是符號化的元組語義;
(2)一組屬性u;
(3)屬性組u中屬性所來自的域d;
(4)屬性到域的對映dom;
(5)屬性組u上的一組資料依賴f。
資料依賴分類:函式依賴(function dependency)、多指依賴(multivalued dependency)。
函式依賴:如學號(s#)、姓名(sn)、系名(sd)。乙個學號對應乙個學生,乙個學生只能在乙個系。就像自變數x確定後,相應的函式值f(x)也就唯一確定了一樣。我們說s#函式決定sn、sd或者說sn、sd函式依賴於s#,記為s# ->sn,s#->sd。1:1單調函式,n:1費單調函式。
例如:現在建乙個資料庫描述學校中的情況,面臨的物件有:學生(用學號s#描述),系(用系名sd描述),系主任(用姓名mn描述),課程(用課程名cn描述)和成績(g)。於是得到了一組屬性。
u=根據現實需求:
1.乙個系有若干學生,乙個學生只能屬於乙個系。
2.乙個系只有乙個系主任。
3.乙個學生可以選多門課,一門課可以供多個學生選修。
4.每個學生選修一門課有乙個成績。
於是得到了屬性組u上的一組函式依賴:f=
如果只考慮函式依賴,得到乙個關係模式s。
在乙個關係模式中,必然存在乙個屬性組e,對於該關係模式的任何乙個關係,當e的值確定之後,關係中別的屬性的值也唯一地被確定了,並且e的任何乙個真子集不再具有這樣的性質。那麼e就是這個關係模式的乙個碼,或叫做候選碼。乙個關係模式可有多個候選碼,指定其中乙個作為主碼。在上面的關係模式中只有唯一碼(s#,cn)。
以上例子有三個「毛病」:
1.如果系剛成立,還沒有學生,或者有學生但是沒有安排課程。則無法把該系及其負責人的資訊存入資料庫。這叫插入異常。
2.反過來,如果某系學生全部畢業,我們在刪除該系同學的時候把這個系及其負責人的資訊也刪除了,這叫刪除異常。
3.冗餘太大。每乙個系負責人的資訊與該系每乙個學生的每門課成績出現一樣多次數。浪費儲存空間,維護困難。如換系主任了,逐一更改每乙個學生選課元組。
分析原因,函式依賴x->y不僅給出了對關係的乙個完整性約束,而且給出了資料庫用作儲存的某種聯絡:從x的資訊應該知道y的資訊。若x不含碼,就不能從x確定其他資訊。即從儲存的觀點看,乙個關係只能反映出碼函式決定關係中別的屬性的函式依賴。於是,本來s#->sd,sd->mn,但由於他們都不是碼,這些資訊就無法依附於s#或sd在資料庫中存在,而必須讓他們依附於(s#,cn)這個屬性組(碼)存在。這樣就導致了三個「毛病」。
解決辦法就是使模式中的各個關係模式打到某種程度的「分離」。可以把關係模式s分成三個關係模式:sdsd>,sgg>,dmn>。這就是一事一地的原則(one fact one place)一種關係值用來描述乙個實體或實體間的屬性。下面介紹規範化理論就是基於這樣乙個簡單的概念。
8.2規範化(normalization)
上節的例子說明並非所有滿足1nf的關係都能很好的描述現實世界,必須做進一步的分析,以確定如何設計乙個好的、反應顯示世界的模式。本節描述如何將具有不合適性質的關係轉換為更合適的形式。
完全函式依賴:r(u)中,若x->y,且對x的任何真子集x'均有x'->y不成立,則,y對x完全函式依賴。
主屬性:包含在任何乙個候選碼中的屬性,叫做主屬性。不包含在任何碼中的屬性叫做非主屬性。
傳遞依賴:r(u)中,若x->y,(y不是x的子集)y->x不成立(n:1),y->z,則稱z對x傳遞函式依賴。若x<->y(1:1)則x->z,不是傳遞依賴了。
全碼:整個屬性集u作為碼。屬性間多對多對多的關係為全碼。
正規化:通常按照屬性間的依賴情況區分關係規範化的程度為1nf,2nf,3nf,4nf,4nf等。
投影運算:簡單的說便是在關係中選擇某些屬性列。
規範化:乙個低一級正規化的關係模式,通過投影運算可以轉換為若干個高一級正規化的關係模式的集合,這種過程就叫做規範化。
2nf:若r∈1nf,且每乙個非主屬性完全函式依賴於碼。-----不要有聯合主鍵就滿足2nf
(s#,c#)->g,s#->sd, (s#,c#)->sd, (s#,c#)->sl,s#->sl,sd->sl(因為每個系只住乙個地方)。 (s#,c#)為碼,決定g,sd,sl。可實際上s#就可以決定sd,sl。因此非主屬性部分依賴於碼。
不滿足2nf就會產生插入異常,刪除異常,冗餘太大。
解決辦法,用投影運算把關係模式分解為兩個模式,sc=s-l-c[s#,c#,g];sl=s-l-c[s#,sd,sl]這樣,均滿足2nf。
3nf:每個非主屬性既不部分依賴於碼(2nf),也不傳遞依賴於碼。
上例中sc∈3nf,sl不∈3nf,sl中有傳遞依賴。傳遞依賴會產生於2nf相似的問題。
解決辦法,用投影運算分解s-l為s-d[s#,sd]與d-l[sd,sl]。
bcnf:關係模式r(u,f)∈1nf,若x->y且y不包含於x時,x必包含有碼(表中(非主,主)屬性必須依賴於碼),則r∈bcnf。bcnf比3nf又進一步。為修正的第三正規化,有時也稱第三正規化。
屬性間關係:1:1x<->y ; 1:nx->y; n:n無函式依賴關係; 1:1:n x<->y->z; 1:m:mn x->y->z傳遞依賴
3nf和bcnf是在函式依賴的條件下對模式分解所能達到的分離程度的度量。乙個模式中的關係模式如果都屬於bcnf,n那麼在函式依賴範疇,已經實現了徹底分離,已經消除了插入和刪除異常。3nf的不徹底性表現在可能存在主屬性
對碼的部分依賴和傳遞依賴。
bcnf是否就完美了呢?在函式依賴範疇內完美了,可是沒有考慮多值依賴。
多值依賴:設r(u)是屬性集u上的乙個關係模式,x、y是u的子集。若對r(u)的任一關係r,對於x的乙個給定值,存在y的一組值與其對應。而y的這組值又不以任何方式與u-x-y中的屬性值相關,那麼就說y多值依賴與x,記為x->->y(n:m或1:n)。當y的這組值的個數總為1時,x->->y就成了x->y。
多值依賴具有對稱性,若x->->y,則x->->z,其中z=u-x-y(多值依賴定義中的藍字)。函式依賴可以看作是多值依賴的一種特殊形式。在關係模式中,若刪除一些元組,則多值依賴可能被破壞。
若x->->y,而z=∅,則稱x->->y為平凡的多值依賴。
多值依賴與函式依賴的比較:
首先,在關係模式r(u)中函式依賴x->y的有效性僅決定於x、y這兩個屬性集的值。只要在r(u)的任何乙個關係r中,元組在x和y上的值滿足定義8.1,則函式依賴x->y在任何屬性集w(xy包含於w包含於u)上成立。也就是說x->y在r[w](xy包含於w包含於u)上成立的充要條件為x->y在r[xy]上成立。
而多值依賴並非如此。x->->y在u上是否成立,不僅要檢查x、y上的值,而且要檢查z=u-x-y上的值。因此若x->->y在w(w包含於u)上成立,而在u上則不一定成立。所以多值依賴的有效性與屬性集的範圍有關。x->->y在u上成立則在w(xy包含於w包含於u)上成立,反之則不然。
4nf:關係模式r∈1nf,如果對於r的每個非平凡多值依賴x→→y(y x),x都含有候選碼,則r∈4nf。
(x→y)
如果r ∈ 4nf, 則r ∈ bcnf
4nf就是限制關係模式的屬性之間不允許有非平凡且非函式依賴的多值依賴。因為根據定義,對於每乙個非平凡的多值依賴x→→y,x都含有候選碼,於是就有x→y,所以4nf所允許的非平凡的多值依賴實際上是函式依賴。
總結:在關聯式資料庫中,對關係模式的基本要求是滿足第一正規化。這樣的關係模式就是合法的、允許的。但是,人們發現有些關係模式存在插入、刪除異常、修改複雜,資料冗餘等毛病。人們尋找解決這些問題的方法,這就是規範化的目的。
規範化的基本思想是逐步消除資料依賴中不合適的部分,使模式中的各關係模式達到某種程度的『分離』,即『one fact one place』的模式設計原則。讓乙個關係描述乙個概念,乙個實體或者實體間的一種聯絡。若多於乙個概念就把它『分離出去』。因此所謂規範化實質上是概念的單一化。關係模式的規範化過程是通過對關係模式的分解來實現的。用投影運算把低一級的關係模式分解為若干個高一級的關係模式。這種投影分解不是唯一的。投影運算的原則下節會介紹。
按照one fact one place的原則構造關係模式(建表)。
1.建表不要定義聯合主鍵,避免違反2nf。
2.one fact one place,表中的碼只能取一到兩個,再多就要拆表了,避免違反3nf的傳遞依賴。
3.兩個以上多值依賴就拆分表,變成4nf。
4.拿不準具體屬性的表,用本章的規範化方法,畫圖,分析依賴關係,符合bcnf,投影運算,拆表,多值依賴變成4nf。
資料庫系統概念 第八章 關聯式資料庫設計
函式依賴 有損分解與無損分解 f集合的閉包 即能從給定f集合推到出的所有函式依賴的集合模式分解 將inst dept id,name,dept name,salary,building,budget 分解為 instructor id,name,dept name,salary department...
資料庫系統概論筆記(第八章)
第八章.資料庫程式設計 1.sql的兩種使用方式 互動式 嵌入式 2.嵌入式sql的一些概念 3.過程化sql 用關聯式資料庫管理系統自己的過程語言定義過程和函式 4.儲存過程 由過程化sql語句書寫的過程,這個過程經編譯和優化後儲存在資料庫伺服器中 6.建立儲存過程 格式 create orrep...
資料庫筆記 (第八章)關聯式資料庫設計
超碼 碼 鍵 能夠唯一標識一條記錄的屬性或屬性集 候選碼 能夠唯一標識一條記錄的最小屬性集。他們的任意真子集都不能成為超碼。主碼 從候選碼裡人為選取的最小屬性集。主屬性 候選碼的並集。非主屬性 不包含在候選碼裡的屬性。除了主屬性的其他屬性。如果乙個關係模式r中的每個屬性a的域值都是原子的,即屬性值是...