為了使數據庫設計合理、可靠、簡單、實用,長期以來形成了關系數據庫設計理論——標準化理論。
6.1關系標準化的作用
標準化是用更簡潔的形式和更標準化的結構取代原有關系模型的過程。
如果兩個或多個實體的數據存儲在壹個表中,會出現以下三個問題:
高數據冗余
插入異常
刪除例外
所謂數據冗余,就是數據庫中重復存儲相同數據的現象。數據冗余不僅會浪費存儲空間,還會造成數據不壹致。
插入異常是指在向不規則數據表中插入數據時,由於實體完整性約束要求主代碼不能為空的限制,無法插入有用數據的情況。
刪除異常是指當不規則數據表中的壹個元組包含壹些有用的數據時,很難刪除。
(以P98工資表為例)
解決上述三個問題的方法是將非標準關系分解成多個關系,使每個關系只包含壹個實體的數據。
(給出壹個示例解決方案)
當然,改進後的關系模型還有壹個問題。在查詢員工工資時,需要把兩個關系連接起來才能查詢,關系連接的代價也很大。
那麽,需要分解什麽樣的關系呢?分解關系模型的理論基礎是什麽?以上三個問題分解後能徹底消除嗎?回答這些問題需要理論指導。接下來,將討論:
6.2功能依賴性
6.2.1屬性關系
實體間的連接有兩種:壹種是實體間的連接;另壹個是實體內部屬性之間的關系。在數據庫建模壹章中,討論的是前壹類,這裏我們將學習第二類。
與第壹類相似,實體中屬性之間的關系可以分為三類:1:1、1:n和m:n:
示例:員工(員工編號、姓名、身份證號、職位和部門)
1,壹對壹關系(1:1)
設X和Y是關系r的兩個屬性(集合),如果Y中至多有壹個值對應於X中的任意特定值,反之亦然,X中至多有壹個值,則稱X和Y之間存在壹壹對應的關系..
例如,在這種情況下,員工號和ID號之間存在壹對壹的關系。
2.壹對多關系(1:n)
設X和Y是關系r的兩個屬性(集合),如果對於X中的任意壹個特定值,可以在Y中找到多個值,而對於Y中的任意壹個特定值,在X中至多只有壹個值與之對應,則稱屬性X與Y是壹對多關系..
比如員工關系中員工編號和職稱是壹對多的關系。
3.多對多關系(多對多)
設X和Y是關系r的兩個屬性(集合),如果Y中有n個值對應於X中的任意特定值,X中有m個值對應於Y中的任意特定值,則稱屬性X與Y具有壹對多(m:n)關系..
比如在員工關系中,職稱和部門是多對多的關系。
上述屬性之間的三種關系實際上是屬性值之間相互依賴、相互制約的反映,所以稱為屬性之間的數據依賴。
有三種數據依賴* * *:
功能依賴性
多值依賴(MVD)
連接依賴項(JD)
其中,函數依賴和多值依賴最為重要。
功能依賴性
功能依賴是屬性之間的聯系。在關系R中,X和Y是R的兩個屬性或屬性組。如果所有的關系R都存在,並且對於X的每個特定值,Y只有壹個特定值,則稱屬性Y函數依賴於屬性X..換句話說,屬性x函數決定屬性y,表示為x → y,其中x稱為決定因素,y稱為被決定因素。
上面的定義可以概括為:如果屬性X的值決定了屬性Y的值,那麽屬性Y的函數依賴於屬性X..換個說法:如果知道x的值,就可以得到y的值,所以可以說x決定y。
如果y函數不依賴於x,則記為x → y。
X Y
如果X→Y,Y→X,註意:
在前面學習的屬性之間的三種關系中,每壹種都沒有函數依賴關系。
u如果x和y的關系為1:1,則存在函數依賴關系x ←→ y。
u如果X和Y的關系是1:n,則存在壹個函數依賴關系:X→Y或Y→X(多個因子是決定因素)。
u如果x和y的關系是m:n,則不存在函數依賴關系。
註意,屬性之間的函數依賴不是指R的壹個或某些子集滿足上述限制,而是指R的所有子集都必須滿足定義中的限制。只要有壹個特定的關系R(R的子集)不滿足定義中的條件,就會破壞函數依賴,使其不成立。
這裏的關系子集指的是R的壹些元組的集合,比如地勘學院的學生關系只包含地勘學院學生的數據,所以是長安大學學生關系的子集。
代碼的定義
前面我們直觀地定義了代碼,現在我們用函數依賴的概念對代碼做壹個更準確的形式化定義:
設K是關系模式R(U,f)中的壹個屬性或屬性組,K '是K的任意子集,如果K→U,但不存在K′→U,則K是R的候選鍵。
如果有多個候選代碼,則選擇其中壹個作為主鍵;
包含在任何候選代碼中的屬性稱為主要屬性;
沒有包含在任何代碼中的屬性稱為非主屬性或非鍵屬性。
在關系模型中,最簡單的情況是單個屬性是壹個代碼,稱為單鍵。最極端的情況是整個屬性組是壹個代碼,稱為All-Key。
單碼的情況以前也遇到過很多次。以下是完整代碼的示例:
簽合同(演員姓名、制作公司、電影名稱)
外碼:R和S有兩種關系,其中X是R的屬性或屬性組,X不是R的代碼,但X是S的代碼(或與S的代碼含義相同),那麽X稱為R的外鍵,簡稱為外碼或外鍵。
如:員工(員工編號、姓名、性別、職稱、部門編號)
部門(部門編號、部門名稱、電話號碼、負責人)
員工關系中的“部門編號”是員工關系的外部代碼。
這裏需要註意的是,定義中說X不是R的碼,並不意味著X不是R的主屬性,X不是碼,但它可以是碼的組成屬性,也可以是任何候選碼的主屬性。
如:學生(學號、姓名、性別、年齡……)
課程(課程編號、課程名稱、教師……)
課程選擇(學號、課程號、年級)
選課關系中,(學號,課程號)是關系的代碼,學號和課程號分別是主代碼的屬性(但不是單獨的代碼)。它們分別是學生關系和課程關系的主要代碼,因此它們是選課關系的兩個外部代碼。
關系之間的關系可以通過同時存在於兩個或多個關系中的主代碼和外部代碼的值來建立。如果要查詢某個員工的部門,只需要查詢部門表中與該員工部門號相同的記錄即可。因此,主代碼和外部代碼提供了壹種表達關系之間連接的方式。
6.2.4代碼的功能依賴性和唯壹性
從上面代碼的形式定義,我們可以說壹個代碼是由壹個或多個屬性組成的,可以唯壹標識壹個元組的最小屬性組。
代碼在關系中總是唯壹的,也就是說,壹個代碼函數唯壹地確定壹行。如果代碼的值重復,整個元組都會重復。否則,它違反了實體完整性規則。元組的重復意味著有兩個相同的實體,這顯然是不可能的,所以代碼不允許重復取值。
因此,只有當某個屬性或屬性組可以通過函數確定關系中的每壹個其他屬性,而屬性組的任何真子集都不能做到這壹點時,該屬性或屬性組才是關系的代碼。
函數依賴是數據相關事物規則的壹個概念。如果屬性b的函數依賴於屬性a,那麽如果a的值已知,那麽b的值就完全可以求出。這並不是說b的值可以由a的值計算出來,而是b的值在邏輯上只能有壹個。
6.3關系模型的規範化
壹,非標準化的關系
當壹個表中有可以細分的數據項時,該表會被反規範化。在非規範化表中有兩種情況:
表中有組合數據項(P102表6-4)。
表中有多值數據項(P103表6-5)。
示例:
員工編號
(全名)
薪水
基本工資
按職付酬
資歷工資
1002
張三
1000
八百
200
員工編號
(全名)
職稱
部門名稱
部門地址
學位
畢業年份
001
張三
教授
計算機
1305
大學
研究生
1963
1982
那麽什麽是標準化的關系呢?
當壹個關系中的所有組件都是不可分割的數據項時,該關系就被規範化了。也就是說,當表中沒有組合數據項和多值數據項,只存在不可分的數據項時,表就是標準化的。
二維表按其規範化程度從低到高可分為五種範式,分別稱為1NF、2NF、3NF(BCNF)、4NF、5NF。標準化程度越高,子集越低,即:
1NF 2NF 3NF BCNF 4NF 5NF
二、第壹範式(1NF)
定義:1:如果關系模式R不包含多值屬性,那麽R滿足第壹範式,記為:
R∈1NF
1NF是對關系的最低要求,不滿足1NF的關系是非標準的。
將非規格化關系轉化為規格化關系1NF的方法很簡單,只要將上表分別橫向和縱向展開即可。下表:
員工編號
(全名)
基本工資
按職付酬
資歷工資
1002
張三
1000
八百
200
1005
李四
1200
900
150
員工編號
(全名)
職稱
部門名稱
部門地址
學位
畢業年份
1002
張三
教授
計算機
1305
大學
1963
1002
張三
教授
計算機
1305
研究生
1982
1005
李四
講師
新店
2206
大學
1989
雖然上表符合1NF,但還是有問題的關系。表中存在大量的數據冗余和潛在的數據更新異常。原因是(員工編號,學歷)是右表中的代碼,但姓名、職稱、部門名稱、部門辦公地址與學歷無關,只是代碼的壹部分。因此,上表需要進壹步標準化。
第三,第二範式(2NF)
定義1:設X和Y是關系R的兩個不同的屬性或屬性組,X→ Y..如果X有壹個真子集X’,使得X’→Y成立,則稱Y部分函數依賴於X,記為:X P→ Y(部分)。另壹方面,據說Y的完全函數依賴於X,記為:X F→ Y(滿)。
定義2:若壹個關系R∈1NF,且其所有非主屬性完全函數依賴於R的任壹候選碼,則R屬於第二範式,記為R∈2NF。
註意:上述定義中所謂的候選碼也包括主碼,因為該碼應該是候選碼才能被指定為碼。
例如關系模式:
員工(員工編號、姓名、職務、項目編號、項目名稱、項目角色)
(員工號,項目號)是這種關系的代碼,員工號→姓名,員工號→職稱,項目號→項目名稱…
So(員工號,項目號)P→職稱,(員工號,項目號)P→項目名稱。
因此,上述員工關系不符合第二範式的要求。它有三個問題:插入異常、刪除異常和修改異常。
其中,修改例外是這樣的。當項目名稱在員工關系上發生變化時,由於項目涉及的人很多,每個人都有壹條記錄,如果要修改項目信息,就要修改參與項目的每個人的信息,增加了工作量,還可能出現遺漏,從而可能導致數據壹致性的破壞。
上述員工關系可以分解為以下三種關系:
員工(員工編號、姓名和職務)
參與項目(員工編號、項目編號、項目角色)
項目(項目編號、項目名稱)
以上三個關系都滿足定義2的要求,所以都滿足2NF。
推論:如果關系模式R∈1NF,並且它的每個候選碼都是單碼,那麽R∈2NF。
符合第二範式的關系模型中可能仍然存在數據冗余、異常更新等問題。如玉
員工信息(員工編號、姓名、職稱、部門名稱、部門辦公地址)
雖然也符合2NF,但是當壹個部門有100名員工時,元組中的部門地址會重復100次,存在很高的數據冗余。原因是在關系中,辦公室地址並不直接依賴於員工號,而是因為員工號函數決定部門名,部門名函數決定辦公室地址,使得辦公室地址函數依賴於員工號。這種依賴是壹個轉移依賴的過程。
因此,上述員工信息的關系模型需要進壹步規範。
第四,第三範式(3NF)
定義1:在關系R中,X,Y,Z是R的三個不同的屬性或屬性組,如果X→Y,Y→Z,但Y→X,且Y不是X的子集,則稱Z傳遞函數依賴於X..
定義2:如果關系模式R∈2NF,並且它的每個非主屬性都不傳遞依賴於任何候選碼,那麽R稱為第三範式,記為R∈3NF。
推論1:如果關系模式R∈1NF,並且它的每個非主屬性既不部分依賴也不傳遞依賴於任何候選代碼,那麽R∈3NF。
推論二:沒有非主屬性的關系模式壹定是3NF。
動詞 (verb的縮寫)改進的3NF-BCNF(博耶-CODD範式)
定義:設關系模型R(U,F)∈1NF。如果f的任意函數依賴於X→Y(Y X),X包含R的壹個碼,則稱之為R∈BCNF。
換句話說,在關系模式R中,如果壹個函數依賴的每個行列式都包含壹個代碼,那麽R∈BCNF
推論:如果R∈BCNF,那麽:
R中的所有非主要屬性完全依賴於每個代碼;
R中的所有主要屬性在功能上完全依賴於不包含它的每個代碼;
r中沒有屬性,壹個完整的函數依賴於任何壹組非代碼的屬性。
定理:如果R∈BCNF,那麽R∈3NF壹定成立。
證明:(結合傳遞依賴的定義,使用反證法)
註:當R∈3NF時,R可能不屬於BCNF。因為與BCNF相比,3NF放寬了限制,它允許決定性因素不包含代碼。例如:
通信(城市名稱、街道名稱、郵政編碼):
F = {(城市名,街道名)→郵政編碼,郵政編碼→城市名}
非壹級郵政編碼的完整功能依賴於代碼,沒有傳輸依賴,所以屬於3NF,但郵政編碼也是決定性因素,不含代碼,所以關系不屬於BCNF。
另壹個例子是:
教學(學生,老師,課程)縮寫為教學(S,t,c)。
規定:壹個老師只能教壹門課,每門課可以多位老師教;壹旦學生選擇了壹門課程,老師就相應地固定下來了。
F={T→C,(S,C)→T,(S,T) →C}
這個關系的候選碼是(s,c)和(s,t),所以這三個屬性都是主屬性。既然沒有非主屬性,那麽這個關系壹定是3NF。然而,因為行列式T不包含代碼,所以它不是BCNF。
關系模式教學中仍然存在數據冗余的問題,因為主屬性依賴於代碼的某些功能。
完全正確:f = {t → c,(S,C)P→T,(S,t) p → c}
因此,教學關系可以分解為以下兩種BCNF關系模式:
老師(老師,課程)學生(學生,老師)
3NF的“不完全性”在於主屬性對代碼可能存在的部分依賴和傳遞依賴。
如果壹個關系模式到達BCNF,它已經在函數依賴的範圍內被完全分離,消除了數據冗余、插入和刪除異常。
6.4多值依賴和第四範式
壹、多值依賴(multimedial dependence)
課程c
教師t
參考書b
物理學
李勇
普通物理學
物理學
李勇
光學原理
物理學
李勇
物理問題集
物理學
王軍
普通物理學
物理學
王軍
光學原理
物理學
王軍
物理問題集
數學
李勇
數學分析
數學
李勇
微分方程
數學
李勇
高等代數
數學
張平
數學分析
數學
張平
微分方程
數學
張平
高等代數
計算數學
張平
數學分析
計算數學
張平
計算數學
計算數學
周峰
數學分析
計算數學
周峰
計算數學
課程c
教師t
參考書b
物理學
李勇
王軍
普通物理學
光學原理
物理問題集
數學
李勇
張平
數學分析
微分方程
高等代數
計算數學
張平
周峰
數學分析
計算數學
例如:學校的某門課程由多位老師教授,他們使用同壹套參考書。每個老師可以教多門課程,每個參考書可以被多門課程使用。下面是壹個非標準化的表格,用來表示老師T,課程C,參考書b之間的關系。
將上表轉化為標準化的二維表教學,如右表。
關系模式教(C,t,b)的碼是(C,t,b),也就是全鍵。所以教∈BCNF。按照上面的語義規定,壹門課程增加壹個講師,教學表中就會增加與相應參考書數量相等的元組。類似地,當要從課程中刪除參考書時,必須刪除相應數量的元組。
添加、刪除、修改數據不方便,數據的冗余也非常明顯。如果我們仔細考察這種關系模式,會發現它有壹個數據依賴,叫做多值依賴。
定義:設R(U)是屬性集U上的壹個關系模式,X,Y,Z是U的子集,Z = U-X-Y .若對R(U)的任意關系R給定壹對(X,Z)值,則有壹組Y值與之對應,這組Y值只取決於X值,與Z值無關。然後說Y的多值取決於X,或者說X的多值決定Y,記為:X→→Y y. ――
比如在關系模型教學中,對於a (c,b)值(物理,普通物理),有壹組T值{李勇,王軍},這組值只取決於課程C中的值(物理),也就是說,對於另壹個(物理和光學原理),其對應的T值仍然是{李勇,王軍},所以T的值與b的值無關,只取決於C的值,即C→→T T。
多值依賴的另壹個等價的正式定義是:
設關系模式R(U),其中X,Y,Z為U的子集,Z = U-X-Y,R為R的任意關系,t1,t2為R的任意兩個元組,若t1[X]=t2[X],且R中有兩個元組t3,t4,則:
t3[X]=t4[X]=t1[X]
t3[Y]=t1[Y],t3[Z]=t2[Z],
t4[Y]=t2[Y],t4[Z]=t1[Z]
如果成立,那麽X→→Y y。
換句話說:如果X→→Y Y在R(U)中成立,只要R的任壹關系R中有兩個元組t1和t2,那麽交換Y(或Z)中這兩個元組的值得到的兩個新元組t3和t4也壹定是關系R中的元組..
在定義中,如果z =ф(空集),X→→Y Y稱為平凡多值依賴,否則為非平凡多值依賴。
多值依賴項具有以下屬性:
1.對稱性:若x→→→ y,則x→→z,其中z = u-x-y。
2.傳遞性:如果X→→→→ Y,Y→→Z Z,那麽X→→→→ Z-Y。
3.如果X→→→ Y且X→→→ Z,則X→→→→ YZ。
4.如果X→→→ Y且X→→Y∩Z,則X→→→→ Y ∩ Z。
5.如果X→→Z-Y,X→→Y-Z,那麽X→→→→ Y-Z,X→→→→ Z-Y。
與函數依賴關系相比,多值依賴關系有以下兩個基本區別:
(1)多值依賴的有效性與屬性集的範圍有關。
如果x →→→ y保持在U上,它必然保持在V上(XY V U);反之則不然,即X→→Y Y在V(V U)上成立,但在U上不壹定成立,這是因為多值依賴的定義不僅涉及屬性組X和Y,還涉及U中的其他屬性Z (z = u-x-y)。
壹般來說,如果R(U)上的X→→Y對V (u)成立,就說X→→Y是R(U)的嵌入多值依賴。
然而,在關系模型R(U)中,函數依賴X→Y的有效性僅取決於兩個屬性集X和Y的值..只要在R(U)的任意關系R中,X和Y上的元組的值使得X→Y成立,那麽X→Y在任意屬性集V(XY V U)中也成立。
(2)如果函數依賴X→Y對R(U)成立,那麽X→Y’對任何Y’Y成立..然而,如果多值依賴X→→Y對R(U)成立,則不能斷言X→→Y '對任何y' y '成立..
多值依賴的約束規則:在有多值依賴的關系中,隨便刪除壹個元組,就會破壞其對稱性。因此,為了保持多值依賴關系,必須刪除其他相關元組以保持其對稱性。這就是多值依賴的約束規則。目前RDBMS不具備維護這種約束的能力,需要程序員在編程中實現。
函數依賴可以看作是多值依賴的特例,即函數依賴壹定是多值依賴。但是,多值依賴不壹定有函數依賴。
第二,第四範式(4NF)
定義:若關系模式R∈1NF,對於R →→→ Y (y x)的每個非平凡多值依賴,X包含壹個碼,則R稱為第四範式,即R∈4NF。
課程c
教師t
參考書b
物理學
李勇
普通物理學
物理學
李勇
光學原理
物理學
李勇
物理問題集
物理學
王軍
普通物理學
物理學
王軍
光學原理
物理學
王軍
物理問題集
數學
李勇
數學分析
數學
李勇
微分方程
數學
李勇
高等代數
數學
張平
數學分析
數學
張平
微分方程
數學
張平
高等代數
計算數學
張平
數學分析
計算數學
張平
計算數學
計算數學
周峰
數學分析
計算數學
周峰
計算數學
教學關系
當關系模式R∈4NF時,R中的所有非平凡多值依賴實際上都是函數依賴。因為每個行列式都包含壹個代碼,所以R必定屬於BCNF。
事實上,4NF限制了關系模式的屬性之間非平凡和非功能多值依賴的存在。相反,4NF允許的非平凡多值依賴實際上是壹種函數依賴。
示例中的教學關系屬於BCNF,但不屬於4NF。因為它的代碼是(C,T,B),所以關系中存在非平凡的多值依賴C →→→ T和C →→→ B,但C不包含代碼,只是代碼的壹部分。
課程c
參考書b
物理學
普通物理學
物理學
光學原理
物理學
物理問題集
數學
數學分析
數學
微分方程
數學
高等代數
計算數學
數學分析
計算數學
計算數學
CB關系
課程c
教師t
物理學
李勇
物理學
王軍
數學
李勇
數學
張平
計算數學
張平
計算數學
周峰
CT關系
為了使教學關系符合4NF,必須將其分解為兩種關系模式:CT(C,t)和CB(C,b)。如右表所示:
從表中可以明顯看出,符合BCNF的關系教學中仍然存在數據冗余,而分解後的關系CT和CB只有瑣碎的多值依賴,所以符合4NF,它們已經消除了數據冗余。可以說,BCNF是僅有函數依賴的關系模式中最標準化的範式,而4NF是多值依賴的關系模式中最標準化的範式。
如果關系模式中存在連接依賴,即使符合4NF,仍然可能遇到數據冗余、異常更新等問題。因此,對於到達4NF的關系模型,需要消除可能的連接依賴,以便進壹步到達5NF的關系模型。
關於連接依賴和5NF的內容已經超出了本課程教學大綱的要求,這裏就不介紹了。