第6章:关系数据库理论(考研重点)
目錄第6章:關系數據庫理論(考研重點)6.1、問題的提出6.2、規范化6.2.1、關系的規范化概述6.2.2、數據依賴6.2.3、函數依賴6.2.4、碼6.2.5、范式6.2.6、多值依賴6.3、數據依賴的公理系統6.3.1、邏輯蘊含6.3.2、Armstrong公理系統6.4、模式的分解(未學)
第6章:關系數據庫理論(考研重點)
代碼是基于SQLServer學習,與MySQL有略微差別!
考研復試或者考研科目中可能會考!
6.1、問題的提出
舉例:
我們要開發一個教務管理系統,信息有:學號,姓名,課號,課名,成績。
首先應該設計數據庫來存儲信息。
針對這個具體系統,應該如何構造一個適合于它的數據庫模式,即應該構造幾個關系模式,每個關系模式由哪些屬性組成等——關系數據庫邏輯設計問題
設計一個數據庫,只有一個關系模式:
SC(SNO, SNAME, CNO, CNAME, G)
主碼:(SNO,CNO)
存在問題:
冗余度大;e.g:每次插入重復sname、cname
更新異常;e.g:修改課名時,只修改了一個
插入異常;e.g:新添加一個學生,但是沒有選課,cno為null;或者新加一門課,但沒有學生選,sno為null
刪除異常;e.g:刪除一名學生的時候,連帶著課程也一起跟著刪除,可能會導致該課程的缺失
一個好的關系數據庫模式應該具備以下四個條件:
盡可能少的數據冗余。
沒有插入異常。
沒有刪除異常。
沒有更新異常。
問題的解決方案:
對關系模式
SC(SNO,SNAME,CNO,CNAME,G)
進行分解;分為下面三個關系模式
S( SNO, SNAM );
C( CNO, CNAME );
SC( SNO, CNO, G )
這樣是否能解決問題?理論基礎是什么?
答:能,關系的規范化理論
6.2、規范化
6.2.1、關系的規范化概述
將結構復雜的關系模式分解成結構簡單的關系模式,從而把不好的關系數據庫模式轉變為好的關系數據庫模式,這就是關系的規范化。
指導關系的規范化有一套完整的理論,稱為關系規范化理論。
關系數據庫模式之所以不好是因為其中有不合適的數據依賴
規范化理論正是用來改造關系模式,通過分解關系模式來消除其中不合適的數據依賴,以解決插入異常、刪除異常、更新異常和數據冗余問題。
關系規范化理論是以數據依賴為基礎的。
關系模式可以形式化的表示為
R(U, D, dom, F)
| 字母 | 含義 |
|---|---|
| R | 關系名 |
| U | 組成該關系的屬性名集合 |
| D | 屬性組U中屬性所來自的域的集合 |
| dom | 屬性向域的映像集合 |
| F | 屬性間數據依賴的集合 |
在本章中關系模式簡記為R(U, F)
6.2.2、數據依賴
數據依賴:關系模式中的各屬性之間相互依賴、相互制約的聯系
數據依賴是語義的體現
模式分解的目的就是消除不好的函數依賴(部分函數依賴、傳遞函數依賴)
建立一數據庫來存儲教務有關信息:
學號:Sno、院系名:Sdept、系主任:Mname、課程號:Cno、課程名:Cname、成績:Grade
單一的關系模式 : S(U, F)
U ={Sno, Sdept, Mname, Cno, Cname, Grade}
F是什么?
U={ Sno,Sdept,Mname,Cno,Cname,Grade }
數據庫的語義:
一個學生只屬于一個系,一個系有若干學生;
Sdept = f(Sno) (Sno --> Sdept)
一個系只有一名系主任;
Sdept --> Mname
一個學生可以選修多門課程, 每門課程有若干學生選修;每個學生所學的每門課程都有一個成績。
(Sno, Cno) --> Grade
F={ Sno-->Sdept, Sdept-->Mname,(Sno, Cno)-->Grade }
數據依賴一般分為
函數依賴( Functional Dependency, 簡記為FD )
多值依賴(Multivalued Dependency,簡記為MVD)
連接依賴
其中,函數依賴是最重要的數據依賴。
6.2.3、函數依賴
定義:設R(U)是一個屬性集U上的關系模式,X和Y是U的子集。若對于R(U)的任意一個可能的關系 r,r中不可能存在兩個元組在X上的屬性值相等, 而在Y上的屬性值不等, 則稱 “X函數確定Y” 或 “Y函數依賴于X”,記作X → Y
Y函數依賴于X 等價于下面:
只要X相等Y就相等
只要Y不相等, X就不相等
對于關系模式:SCD{ SNO,SN,AGE,DEPT,MN,CNO,SCORE }
SNO → SN
SNO → AGE
SN → AGE:學生有重名的情況下,age 不函數依賴與 sn
SNO →DEPT
DEPT → MN
SNO → MN
SNO → SCORE:學生可能有多門課的成績,因此 score 不函數依賴于 sno
(SNO,CNO) → SCORE
幾個術語和記號
決定因素、依賴因素
若X→Y,我們稱X為決定因素,Y為依賴因素。
X←→Y
若X→Y,Y→X,則記作X←→Y
X ? Y
若Y不函數依賴X,則記作X ? Y
函數依賴的幾點說明
1、函數依賴是語義的體現,我們只能根據語義來確定一個函數依賴。
對于關系模式:SC{SNO, SN, AGE, CNO, SCORE}
語義1:學生可以重名 SN ? AGE
語義2:學生不可以重名 SN → AGE
語義3:一名學生可以選多門課: SNO ? CNO
語義4:一名學生只可以選一門課:SNO → CNO
2、平凡的函數依賴與非平凡的函數依賴。
當屬性集Y是屬性集X的子集時,則必然存在著函數依賴X→Y,這種類型的函數依賴稱為平凡的函數依賴。
(Sno, Sage) → Sno
(Sno, Sage) → Sage
(Sno, Sage) → (Sno, Sage)
如果Y不是X的子集,則稱X→Y為非平凡的函數依賴。
對于任一關系模式,平凡函數依賴都是必然成立的,它不反映新的語義,因此若不特別聲
明, 我們總是討論非平凡函數依賴。
3、函數依賴與屬性之間的聯系類型有關。
在一個關系模式中,如果屬性X與Y有1:1聯系時, 則存在函數依賴X→Y, Y→X, 即X←→Y。
當學生無重名時,SNO與SN有1:1聯系, SNO ←→ SN
在一個關系模式中,如果屬性Y與X有1:m的聯系時,則存在函數依賴X→Y。
AGE與SNO之間1:m聯系,所以有SNO→AGE。
所以在確定屬性間的函數依賴關系時,可以從分析屬性間的聯系類型入手,便可確定屬
性間的函數依賴。
函數依賴的基本性質
1、傳遞性
若X→Y,Y→Z ,則有X→Z
證明:任意兩個元組u, v, 假設其X部分相等。
兩個元組u, v的X部分相等,則有Y部分相等(因為X→Y),那么Z部分也肯定相等(因為Y→Z )。
所以X→Z 。
2、擴張性
若X→Y且W→Z,則(X,W)→(Y,Z)。
例如,對關系模式
SC(SNO,SNAME,AGE, CNO,CNAME,G)
有SNO→(SNAME,AGE),CNO→CNAME
則有(SNO,CNO)→(SNAME,AGE,CNAME)
3、合并性
若X→Y且X→Z則必有X→(Y,Z)。
例如,對于關系模式
SCD{SNO,SN,AGE,DEPT,MN,CNO,CORE}
SNO→(SN,AGE),SNO→(DEPT,MN),
則有SNO→(SN, AGE, DEPT, MN)。
4、分解性
若X→(Y,Z),則X→Y且X→Z。
分解性為合并性的逆過程。
完全函數依賴、部分函數依賴、傳遞函數依賴
(重點)定義:
在關系模式R(U)中,如果X → Y,并且對于X的任何一個真子集X',都有X'? Y, 則稱 Y完全函數依賴于X,記作X→Y。
在關系模式R(U)中,若X → Y,但Y不完全函數依賴于X,則稱Y部分函數依賴于X,記作X→Y。
例如,對關系模式:SC(SNO,SNAME,AGE, CNO,CNAME,GRADE)
(SNO,CNO) →^F^ GRADE
(SNO,CNO) →^P^ AGE
在關系模式R(U)中,如果X→Y,Y→Z,且Y ? X,Z ? Y,Y ? X,則稱Z傳遞函數依賴于X。
6.2.4、碼
超碼:
超碼由一個或多個屬性組成的一個屬性集,這個屬性集可以唯一確定關系中的每一個元組。
學號
(學號,姓名)
如果K是超碼,則K的任意超集也是超碼。
候選碼:如果一個超碼的任意真子集都不能成為超碼,這樣的最小超碼稱為候選碼。
主碼:候選碼可能有多個,數據庫設計人員選中的用來標識每一個元組的候選碼稱為主碼。
主屬性:包含在任何一個候選碼中的屬性。
非主屬性:不包含在任何一個候選碼中的屬性。
全碼
最簡單的情況下,單個屬性構成碼。
最復雜的情況下,一個關系的全部屬性構成碼,稱為全碼。
例:
S(Sno, Sname, Sdept ),
Sno 是碼,Sno主屬性。
非主屬性:Sname, Sdept
SC(Sno,Cno,G)
(Sno ,Cno)是碼, 所以Sno與Cno是主屬性,
G是非主屬性。
K是R(U, F) 的屬性或屬性集合。若 K →^F^ U,則稱K為R的侯選碼(Candidate key)。
例:S(U, F), U = {Sno,Sname, Sdept }
F = {Sno→Sname, Sno→Sdept}
有 Sno→^F^ U,所以Sno是S的候選碼;
(Sno,Sname)是候選碼嗎?不是,(Sno,Sname) →^P^ U
6.2.5、范式
針對同一個數據庫問題不同的人設計出來的關系模式不完全相同。
Q:用什么標準來衡量關系模式的好壞?
A:范式
范式是符合某一種級別的關系模式的集合。
范式的種類:
1、第一范式(1NF)
2、第二范式(2NF)
3、第三范式(3NF)
4、BC范式(BCNF)
5、第四范式(4NF)
6、第五范式(5NF)
各種范式之間存在聯系:
5NF ? 4NF ? BCNF ? 3NF ? 2NF ? 1NF
某一關系模式R為第n范式,可簡記為R ∈ nNF
規范化:一個屬于低一級范式的關系模式,通過分解可以轉化為若干個屬于高一級范式的關系模式。這個過程就是規范化。
1NF
1NF的定義:如果一個關系模式R的所有屬性都是不可分的基本數據項,則R∈1NF。
第一范式是對關系模式的最起碼的要求。不滿足第一范式就不能稱之為關系模式。
但是滿足第一范式的關系模式并不一定是一個好的關系模式。屬于1NF可能存在數據冗余和各種異常。
例: 關系模式 SLC
Sno:學號;Sn:學生姓名;Dno:系別號;Dloc:系的位置;Dn:系名;Cno:課程編號;Cn:課程名稱;Grade:分數;
SLC(Sno,Sn,Dno,Dn,Dloc,Cno,Cn,Grade)
(SNO,CNO)為碼
存在問題
數據冗余
更新異常
插入異常
刪除異常
2NF
2NF的定義:若關系模式R∈1NF,并且每一個非主屬性都完全函數依賴于R的碼,則R∈2NF。
2NF的定義還可以等價如下內容:
從1NF到2NF:消除非主屬性對碼的部分函數依賴
SLC(Sno,Sn,Dno,Dn,Dloc,Cno,Cn,Grade):不屬于 2NF
(Sno, Cno)為碼
非主屬性
Dno, Sn, Dn, Dloc, Cn, Grade
數據依賴
(Sno, Cno)→^F^ Grade
(Sno, Cno)→^P^ Dno
(Sno, Cno)→^P^ Dn
(Sno, Cno)→^P^ Cn
(Sno, Cno)→^P^ Dloc
(Sno, Cno)→^P^ Sn
投影分解法:
采用投影的方式進行分解。
分解時遵循的基本原則就是:讓一個關系只描述一個實體或者只描述實體間的一種聯系。
主要目的消除不合適的函數依賴。
SLC(Sno,Sn,Dno,Dn,Dloc,Cno,Cn,Grade)
分解為如下三個關系模式
SD(Sno, Sn, Dno, Dn, Dloc)
Sno為碼
C(Cno, Cn)
Cno為碼
SC(Sno, Cno, Grade)
(Sno, Cno)為碼
都屬于2NF,將一個1NF關系模式分解為多個2NF的關系模式,并不能完全消除關系模式中的數據冗余和各種異常情況
3NF
3NF的定義:關系模式R(U, F)中若不存在這樣的碼X、屬性組Y及非主屬性Z(Z Y), 使得X→Y, Y? X, Y→ Z成立,則稱R(U,F)∈3NF
3NF的定義還可以等價如下內容:
如果關系模式R中不存在非主屬性部分函數依賴于碼, 也不存在非主屬性傳遞函數依賴于碼, 則稱模式R∈3NF
其實也就是說關系R中的所有非主屬性都完全函數依賴于碼,也直接函數依賴于碼;
從3NF中我們可以得到如下結論:
1、結論一:
如果關系模式R ∈ 3NF,則R中每一個非主屬性完全函數依賴于碼。
2、結論二:
如果關系模式R ∈ 3NF,則R中每一個非主屬性不傳遞函數依賴于碼
3、結論三:
如果關系模式R中每一個非主屬性既不部分函數依賴于碼也不傳遞函數依賴于碼,則R ∈ 3NF
例如:SLC(Sno,Sn,Dno,Dn,Dloc,Cno,Cn,Grade)
分解為如下三個關系模式
SD( Sno, Sn, Dno, Dn, Dloc )
C(Cno, Cn)
SC(Sno, Cno, Grade)
都屬于2NF,其中對于關系模式SD,
Sno→Dno,Dno→Dn,Dno ? Sno,Dn傳遞函數依賴于Sno。所以SD不屬于3NF
對上面SD分解(投影分解)
S(Sno, Sn, Dno)
D(Dno, Dn, Dloc)
C(Cno, Cn)
SC(Sno, Cno, Grade)
都屬于3NF,解決了冗余異常問題
1)設計數據庫存儲如下信息:
信息:學生(Sno, Sn),教師(Tno, Tn),課程(Jno, Jn)。
每一名教師只教一門課,每門課由若干教師教。
每個學生可以選修多門課,一門課可以被多個學生選修。
某一學生選修某門課時,要指定選修哪個老師教的這門課,學生一旦選修了某個老師教的這門課,就不能再選修別的老師教的這門課。
2)設計關系模式。
S(Sno, Sn), T(Tno, Tn), J(Jno, Jn)
STJ(Sno, Jno, Tno)
STJ中的函數依賴:
Tno →^F^ Jno,(Sno,Tno) →^P^ Jno,
Jno ? Tno
Sno ? Tno,Tno ? Sno
(Sno,Jno) →^F^ Tno
3)STJ(Sno, Jno, Tno)屬于幾范式 答:3NF
STJ中的數據依賴
Tno→Jno, (Sno,Tno)→Jno
(Sno,Jno)→Tno
STJ中的候選碼
Tno、Sno和 Jno,每一個單獨能不能作為候選碼?不能
(Tno, Jno)能不能作為候選碼? 不能
(Sno,Tno)和(Sno,Jno)能不能作為候選碼?能
(Sno,Tno) →^F^ U (Sno,Jno) → ^F^ U
STJ沒有非主屬性, STJ ∈ 3NF
STJ(Sno, Jno, Tno)存在問題:
假設劉老師(T1)教數據庫(J1),有200個學生選修劉老師教的數據庫,J1和T1的聯系將出現200次
學生選課前,J1和T1的聯系不能體現在數據庫中。
(Sno,Tno)和(Sno,Jno)為候選碼
在STJ中出現的問題表明需要更高級別的范式進行模式分解!
在實際工作建表的過程中,達到 3NF 即可!
BCNF
BCNF的定義:
設關系模式R(U, F)∈1NF,如果對于R的每個函數依賴X→Y,若Y X,則X必含有碼,那么R(U, F) ∈ BCNF。
設關系模式R(U, F)∈1NF,如果R中的每一個非平凡的函數依賴的決定因素都包含碼,則R(U, F) ∈ BCNF
對于關系模式STJ(Sno,Jno,Tno) ,候選碼:(Sno,Tno), (Sno,Jno)
STJ中的數據依賴
Tno→ Jno
(Sno,Tno)→Jno (Jno)主屬性對不包含該主屬性的碼的部分函數依賴
(Sno,Jno)→Tno
對于Tno→Jno,但Tno中不含有碼,STJ不屬于BCNF。
從BCNF范式中,可以得出以下結論:
1、結論一:如果R ∈ BCNF,則R ∈ 3NF。
2、結論二:R ∈ BCNF,則R中不存在主屬性對不包含該主屬性的碼的部分函數依賴。
下面嘗試進行模式分解:
方案一:
把STJ(Sno, Jno, Tno)分解
TJ( Tno, Jno )
SJ( Sno, Jno)
分解不合理,原先的語義丟失
舉例:在SJ(Sno,Jno)中,學生S1選了J1這門課,但是一門課可以被多個老師教,也就造成了學生S1選的J1這門課不知道是哪位老師教的。
方案二:
把STJ(Sno, Jno, Tno)分解
TJ( Tno, Jno )
ST( Sno, Tno)
對于TJ ( Tno, Jno )
碼為Tno
Tno→Jno
∈ BCNF
對于ST ( Sno, Tno)
碼為(Sno,Tno)
(Sno,Tno)→Sno (Sno,Tno) → Tno
沒有非平凡的函數依賴,而平凡的函數依賴我們不討論,所以 ∈ BCNF
解決了STJ中存在的問題。
如果上面的定義看蒙了,可以直接記住這些范式的要求即可:
前3個范式都是對非主屬性進行討論的
總結:
1NF:關系模式中的所有屬性列都是不可再分的數據項
2NF:每一個非主屬性都完全函數依賴于碼
3NF:每一個非主屬性既完全函數依賴于碼也直接函數依賴于碼
BCNF:每一個主屬性對不包含該主屬性的碼要完全函數依賴,主屬性對碼要直接函數依賴
4NF:對于每個多值依賴X→→Y (U-X-Y ≠ ? 且Y ? X),則必有函數依賴X→Y
6.2.6、多值依賴
∈ BCNF的關系模式是否完美呢?
? 如果一個關系數據庫中所有關系模式都屬于BCNF,那么在函數依賴的范疇內,已經實現了模式的徹底分解,消除了異常的根源,而且數據冗余也減少到極小程度但在其他數據依賴的范疇內有可能仍然存在問題。多值依賴
設計數據庫存儲如下信息
課程:Cno, Cn;教師:Tno, Tn;參考書:Bno, Bn
語義: 學校中某一門課程由多個教師講授,一個教師可以講授多門課;不同教師講授同一門課時使用相同的一套參考書,一本參考書可以被多門課使用。
關系模式
C(Cno,Cn); T(Tno, Tn); B(Bno, Bn)
CTB(Cno, Tno, Bno)
數據:
兩門課:C1(數學)、C2(物理);
三名教師:T1(李勇)、T2(王軍)、T3(張平);李勇教物理和數學,王軍教物理,張平教數學。
物理的參考書:B1(普通物理學)、B2(光學原理)、B3(物理習題集);
數學的參考書:B4(數學分析)、B5(微分方程)、B6(高等代數);
考慮CTB(Cno, Tno, Bno)對應的關系中有多少元組?12個
在關系模式CTB中,碼是什么?
單獨的Cno、Tno、Bno都不行,無法唯一標識每一個元組
(Cno,Tno)也不行,(Cno,Bno)也不行,(Tno,Bno)也不行,雖然上圖中(Tno,Bno)看著沒有重復的,但是一本參考書可以被多門課程使用;
所以得出結論,在關系模式CTB中,碼為全碼(Cno,Tno,Bno)
關系模式CTB(Cno, Tno, Bno)的候選碼:
全碼
CTB(Cno, Tno, Bno)屬于第幾范式
由于是全碼,沒有非主屬性,CTB ∈ 3NF
沒有主屬性對不包含該主屬性的碼的部分函數依賴
沒有主屬性對碼的傳遞函數依賴
CTB ∈ BCNF
如下是在CTB關系模式中插入的一些數據:
CTB(Cno, Tno, Bno)存在的問題
數據冗余度大
插入異常
刪除異常
修改異常
對于關系模式CTB(Cno, Tno, Bno)在函數依賴的范疇內不存在任何問題。
但CTB存在不合理的多值依賴,只有消除這些不合理的多值依賴才能 ∈ 4NF。
(Cno,Tno)與Bno之間有什么樣的制約聯系?
對于(Cno,Tno),給定一個值(C1,T1), Bno有一組值{B1, B2, B3}與之對應。
對于(Cno,Tno),給定另外一個值(C1,T2),Bno有同樣一組值{B1, B2, B3}與之對應。
給定(Cno,Tno)合理的一些值,只要Cno相同,不管Tno取什么值,那么Bno就一直有同樣一組值與之對應
這時稱Bno多值依賴Cno: Cno →→ Bno
多值依賴的定義:設R(U)是一個屬性集U上的一個關系模式, X、Y和Z是U的子集,并且Z=U-X-Y,多值依賴X→→Y成立,當且僅當對R的任一關系r,r在(X,Z)上的每個值對應一組Y的值,這組值僅僅決定于X值而與Z值無關。
對于(X, Z)上的一些值,只要X部分相等,不管Z部分取何值, Y都有相同的一組值與之對應,就有X→→Y 。( Z=U-X-Y )
1、CTB(Cno,Tno,Bno),考慮Bno是否多值依賴Cno?yes
課程號對應一組的參考書,而與老師無關,也就是說不管哪個老師來教哪門課程,參考書是不變的;
2、CTB(Cno, Tno, Bno)有沒有Tno多值依賴Cno?yes
課程號對應一組老師,而與參考書無關,也就是說教哪門課的老師是固定的,與選取哪些參考書無關;
3、對于關系模式CTB(Cno, Tno, Bno),假設不同的老師教同一門課時可以使用不同的參考書,這時有沒有Bno多值依賴Cno?no
根據定義來判斷,教同一門課使用不同的參考書,不是多值依賴;
多值依賴的另一個等價的形式化的定義:
在R(U)的任一關系r中, 如果存在元組t, s使得t[X]=s[X], 那么就必然存在元組w, v ∈ r, 使得w[X]=v[X]=t[X],而w[Y]=t[Y], w[Z]=s[Z], v[Y]=s[Y], v[Z]=t[Z], 則Y多值依賴于X, 記為X→→Y。 這里X, Y是U的子集, Z=U-X-Y。
定義的理解(重點理解): 對r中任意兩個元組t和s, 若t[X]=s[X], 那么交換t, s的Y值部分得到的兩個元組也在r中。
多值依賴的性質
1、假設Z=U-X-Y = ?,則肯定有X→→Y。這樣的多值依賴稱為平凡的多值依賴。
2、如果 X→→Y,并且Z=U-X-Y ≠ ?。這樣的多值依賴稱為非平凡的多值依賴。
3、如果X→Y,則肯定有X→→Y。(有函數依賴必然有多值依賴)
4、如果Y ? X,則肯定有X→→Y。(平凡的函數依賴必然是多值依賴)**
因為Y ? X,則X→Y,所以X→→Y,即平凡的函數依賴必然是多值依賴,但多值依賴不一定是函數依賴。
注意:當Z = U -X-Y = ? 或者Y ? X時,肯定有X→→Y,對于這樣的多值依賴我們一般不討論。
多值依賴與函數依賴的區別
多值依賴的有效性與屬性集的范圍有關。
若X→→Y在U上成立, 則在W(X∪Y ? W ? U)上一定成立。
X→→Y在W(W ? U)上成立,在U上并不一定成立。
函數依賴有效性與屬性集的范圍無關。
若函數依賴X→Y在R(U)上成立, 則對于任何Y ′? Y均有X→Y′成立。
多值依賴X→→Y若在R(U)上成立, 我們卻不能斷言對于任何 Y′? Y 有X→→Y′成立。
4NF
4NF的定義:關系模式R(U, F) ∈ 1NF,如果對R的每一個多值依賴X →→ Y(U-X-Y ≠ ? 且Y ? X),X都含有碼,則稱R ∈ 4NF。
4NF:對于每個非平凡的多值依賴必是函數依賴
由第四范式可得知如下結論:
1、結論1:如果一個關系模式R ∈ 4NF,則必有R ∈ BCNF。
2、結論2:如果一個關系模式R ∈ 4NF, 對于每個多值依賴X →→ Y (U-X-Y ≠ ? 且 Y ? X),則必有函數依賴X → Y 。
注意:只有消除不是函數依賴的多值依賴X→→Y(U-X-Y ≠ ?且Y ? X) ,一個關系模式才可以∈4NF。
e.g:關系模式
C(Cno,Cn); T(Tno, Tn); B(Bno, Bn)
CTB(Cno, Tno, Bno)
關系模式CTB(Cno, Tno, Bno)的候選碼:全碼
CTB(Cno, Tno, Bno)屬于BCNF yes
CTB(Cno, Tno, Bno)是否 ∈ 4NF no
Cno→→Tno(U-Cno-Tno≠ ?且Tno ? Cno)
這時Cno? Tno
Cno→→Bno(U-Cno-Tno≠ ?且Tno ? Cno)
這時Cno? Bno
對關系模式CTB(Cno, Tno, Bno)進行分解
CT(Cno,Tno)
CB(Cno,Bno)
對于CT(Cno,Tno)
全碼
∈ 4NF
對于CB(Cno,Bno)
全碼
∈ 4NF
規范化
函數依賴和多值依賴是兩種最重要的數據依賴。
如果只考慮函數依賴,則屬于BCNF的關系模式規范化程度已經最高了。
如果考慮多值依賴,則屬于4NF的關系模式規范化程度是最高的了。
關系模式的規范化過程是通過對關系模式的分解來實現的。模式的分解就是把低一級的關系模式分解為若干個高一級的關系模式。
這種分解不是唯一的。
規范化的基本思想:
通過對關系模式的分解消除不合適的數據依賴(函數依賴和多值依賴)。
可以采用合理的設計方法,使關系關系模式在設計時式達到某種程度的“分離”,以消除不合適的數據依賴。
采用“一事一地”的模式設計原則
讓一個關系描述一個實體或者實體間的一種聯系
所謂規范化實質上是概念的單一化
6.3、數據依賴的公理系統
主要是講函數依賴的公理系統
6.3.1、邏輯蘊含
邏輯蘊含的定義:對于滿足一組函數依賴F的關系模式R<U,F>,其任何一個關系r,若函數依賴X→Y都成立, 則稱F邏輯蘊含X→Y
例如:
在R<U, F>中,其中U={A, B, C}, F={A→B,B→C} 。
A→C:被F邏輯蘊含
A→BC:被F邏輯蘊含
A→A:被F邏輯蘊含(平凡的函數依賴)
A→B:被F邏輯蘊含
B →A:不被F邏輯蘊含
6.3.2、Armstrong公理系統
一套推理規則,是模式分解算法的理論基礎
用途
求得F所邏輯蘊含的函數依賴
對于關系模式R<U,F>來說有以下的推理規則:
A1、自反律(Reflexivity):若Y ? X ?U,則X→Y為F所蘊含。
A2、增廣律(Augmentation):若X→Y為F所蘊含,且Z?U,則XZ→YZ為F所蘊含。
A3、傳遞律(Transitivity):若X→Y及Y→Z為F所蘊含,則X→Z為F所蘊含。
Armstrong公理系統的有效性與完備性
有效性:由F出發根據Armstrong公理推導出來的每一個函數依賴一定在F+中。
完備性:F+中的每一個函數依賴,必定可以由F出發根據Armstrong公理推導出來。
自反律、增廣律、傳遞律的證明
1、自反律:若Y ? X ?U,則X→Y為F所蘊含。
證:對于R <U,F> 的任一關系r中的任意兩個元組t、s,若t[X]=s[X],
由于Y?X,有t[Y]=s[Y],
所以X→Y成立,自反律得證。
2、增廣律:若X→Y為F所蘊含,且Z?U,則XZ→YZ為F所蘊含。
證:
對于R<U,F>的任一關系r中任意的兩個元組t、s,若t[XZ]=s[XZ],
則有t[X]=s[X] 和 t[Z]=s[Z];
由于X→Y,于是有t[Y]=s[Y],
所以t[YZ]=s[YZ],
所以XZ→YZ為F所蘊含,增廣律得證。
3、傳遞律:若X→Y及Y→Z為F所蘊含,則 X→Z為 F所蘊含。
證:
對于R<U,F> 的任一關系 r中的任意兩個元組 t、s,若t[X]=s[X],
由于X→Y成立,有 t[Y]=s[Y];
再由Y→Z成立,有t[Z]=s[Z],
所以X→Z為F所蘊含,傳遞律得證。
根據Armstrong公理系統的A1,A2,A3這三條推理規則,可以得到下面三條比較有用的推理規則
合并規則:由X→Y,X→Z,有X→YZ。
∵ X→Y ∴ X→XY (A2)
∵ X→Z ∴ XY→YZ (A2)
∴ X→YZ (A3)
偽傳遞規則:由X→Y, WY→Z, 有XW→Z。
∵ X→Y ∴ XW→YW (A2)
∵ WY→Z∴ XW→Z (A3)
分解規則:由X→Y及Z ?Y,有X→Z。
∵Z ? Y ∴Y→Z (A1)
又∵ X→Y ∴X→ Z (A3)
引理6.1:X → A1 A2… Ak 成立的充分必要條件是X → Ai ( i=1,2, …, k)成立。
必要性:
X→A1A2…Ak => X→Ai ( i=1,2, …, k)
由分解規則可以得到
充分性:
X→Ai ( i=1,2, …, k) => X → A1 A2… Ak
由合并規則可以得到
F^+^(函數依賴集)的閉包
F+的定義:在關系模式R<U,F>中為F所邏輯蘊含的函數依賴的全體叫作F的閉包,記為F^+^。
例1:
例2:
F^+^ 計算是NP完全問題。
F^+^是函數依賴的集合,而X+~F~是X關于F屬性集的集合
屬性集X關于函數依賴集F的閉包(X+~F~)
為U上一組函數依賴,X ? U,X+~F~={A|X → A能由F根據Armstrong公理推出},稱為屬性集X關于函數依賴集F的閉包。A是U中的單個屬性。
例1:
F^+^與X^+^ ~F~的區別
F+是函數依賴的集合,該集合里的每個函數依賴都被F邏輯蘊涵
X^+^F為屬性的集合,對于該集合里的每一個屬性A,X → A能由F根據Armstrong公理推出
引理6.2:設F為屬性集U上的一組函數依賴, X, Y ? U, X→Y能由F根據Armstrong公理導出的充分必要條件是Y ? X^+^ ~F~。
證明:
用途:將判定 X→Y 是否能由 F 根據Armstrong公理導出的問題,就轉化為求出X^+^ ~F~,判定Y是否為X^+^ ~F~的子集的問題
通過算法求 X^+^ ~F~
求屬性集X(X ? U)關于U上的函數依賴集F的閉包X^+^ ~F~ 的算法思想。(迭代)
基礎:首先讓 X^+^ ~F~ = X
迭代:如果Y ? X^+^ ~F~ 并且Y→ A被F邏輯蘊涵, 把A增加到X^+^ ~F~中。
對于新得到X^+^ ~F~繼續迭代。
結束條件:前后兩次迭代X^+^ ~F~保持不變或者X^+^ ~F~等于U。
算法6.1:求屬性集X(X ? U)關于U上的函數依賴集F的閉包X^+^ ~F~
輸入:X,F ; 輸出: X^+^ ~F~
步驟:
(1) 令X(0)=X,i=0
(2) 求Z:
Z={A | (?V), (?W), (V → W ∈ F ^ V ? X(i) ^ A ∈ W}
(3) X(i+1)=Z∪X(i)
(4)判斷 X(i+1) =X(i)是否成立。
(5)如果(4)成立或X(i)=U,則X^+^ ~F~=X(i), 算法終止。
(6)若(4)假,則讓i=i+1, 返回(2) 。
練習:通過X^+^ ~F~,可以用來驗證X是否關系模式R的候選碼
已知關系模式R(U, F),U={A,B,C,D,E}, F={AB→C, B→D, C→E, EC→B, AC→B}
驗證:(AB) 是候選碼。
提示:就是驗證U完全函數依賴AB
(1) U函數依賴AB
(2) U不函數依賴AB的任一真子集
如果(AB)^+^ ~F~= U可以驗證(1)
如果(A)^+^ ~F~ ≠ U,(B)^+^ ~F~ ≠ U可以驗證(2)
函數依賴集等價
定義6.14:如果G+=F+,就說函數依賴集F覆蓋G(F是G的覆蓋,或G是F的覆蓋),或F與G等價。
引理6.3:F+=G+的充分必要條件是F ? G+和G ? F+
要證明該引理要用到下面兩個結論:
結論一:F和G為函數依賴集, F ? G, 則有X^+^ ~F~ ? ^+^ ~G~
結論二:G為函數依賴集,則G+= (G+)+
定義6.15:如果函數依賴集F滿足下列條件,則稱F為一個極小函數依賴集。亦稱為最小依賴集或最小覆蓋。
F中任一函數依賴的右部僅含有一個屬性。(右側是單個屬性)
F中不存在這樣的函數依賴X→A,使得F與F - {X→A}等價。(不存在多余的函數依賴)
F中不存在這樣的函數依賴X→A,X有真子集Z使得F-{X→A}∪{Z→A}與F等價。(左側不能有多余的屬性)
定理6.3:每一個函數依賴集 F 均等價于一個極小函數依賴集 F~m~。此 F~m~ 稱為F的最小依賴集。
重點:如何求極小函數依賴集(也就是證明F~m~和F是等價的過程)
證:構造性證明,依據定義分三步對F進行“極小化處理”,找出F的一個最小依賴集。
(1)、右部 分解:
逐一檢查F中各函數依賴:X→Y,
若Y=A1A2 …Ak,k ≥ 2
則用{X→Aj | j=1, 2, …, k}來取代X→Y。
(引理6.1 保證了F變換前后的等價性)
(2)、去掉多余的依賴:
逐一檢查F' 中各函數依賴:X→A,
令G = F' - {X→A},
若A ∈ XG+, 則從F' 中去掉此函數依賴。
(3)、 去掉左部多余的屬性:
逐一取出F''中各函數依賴: X→A, 設X=B1B2…Bm
逐一考查Bi (i=l,2,…,m),
若A ∈ (X-Bi)F''+ ,則以(X-Bi) →A 取代X →A 。
找關系模式R中的所有候選碼
設關系模式R(U, F)
若屬性A僅在F的函數依賴的左部出現,則R的任一候選碼必包含屬性A 。
若屬性A在F的函數依賴中沒有出現,則R的任一候選碼必包含屬性A 。
若屬性A僅在F的函數依賴的右部出現,則R的任一候選碼都不包含屬性A 。
若X為僅在F的函數依賴的左部出現的屬性和沒有在F的函數依賴中出現的屬性組成的
屬性集,且X+F = U,則X為R的唯一候選碼。
一般做這類題的步驟:
1、將函數依賴極小化處理
2、找出所有的候選碼
3、判斷達到第幾范式
4、進行模式分解,達到3NF
6.4、模式的分解(未學)
總結
以上是生活随笔為你收集整理的第6章:关系数据库理论(考研重点)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 蓝牙扫描枪直连蓝牙打印机
- 下一篇: 大彻大悟 英特尔5系列芯片组完全剖析