關聯資料庫概念 (relational database...
TRANSCRIPT
6-0
關關關聯聯聯資資資料料料庫庫庫概概概念念念 (((RRReeelllaaatttiiiooonnnaaalll DDDaaatttaaabbbaaassseee CCCooonnnccceeeppptttsss)))
6-1 簡介
於前數章,我們談到的都是如何對資料庫讀取資料,從本章開始我們將探討如何設計資
料庫,在此之初,有些基礎概念必須先作釐清,本章將詳細討論資料庫之正規化(Normal Form)
概念、與功能支配關係(Functional Dependencies)之概念,以為第七章資料庫設計作準備。
6-2 設計概念(Design Concepts)
6-2-1 方便性關聯表(Unnormalized Relations)
6-2-2 第一正規化型式(First Normal Form)概念
6-2-3 第二正規化型式(Second Normal Form)概念
6-2-4 第三正規化型式(Third Normal Form)概念
6-2-5 Boyce-Codd 正規化型式(Boyce-Codd Normal Form)概念
6-2-6 第四正規化型式(Fourth Normal Form)概念
6-3 功能支配關係概念(Concepts of Functional Dependencies)
6-3-1 基礎概念(Basic Concepts)
6-3-2 功能支配之內範圍關係集合
(Closure of a Set of Functional Dependencies)
6-3-3 欄位內範圍集合(Closure of Attribute Sets)
CCCHHHAAAPPPTTTEEERRR
6-1
6-3-4 功能支配關係之簡化(Canonical Cover)
6-3-4-1 多餘欄位(Extraneous Attribute)
6-3-4-2 多餘欄位之定義(Definition of Extraneous Attribute)
6-3-4-3 多餘欄位之測試(Test for Extraneous Attribute)
6-3-4-4 功能支配關係之簡化演算法 (Algorithm for Canonical Cover)
6-4 習題(Exercises)
6-2 設計概念(Design Concepts)
如前述,資料庫設計得優良與否,將造成資料遺失、累贅儲存、或障礙存取等憾事。而
理論觀念雖然有趣,但在探討前,如果沒有觀念上的認識,必是深奧難懂,鑒於此,本節將
以淺顯圖表先作初期之介紹。
6-2-1 方便性關聯表(Unnormalized Relations)
資料庫關聯表之架構(Schema) 有其一定方式之安排方法,我們稱為 “正規化(Normal
Form)”。對初學者來言,並不了解正規化是何方神聖,只知道就自己之方便,設置一個關聯
表來容納要儲存的資料,如此關聯表是謂 “方便性關聯表(Unnormalized Relations)”。
6-2
資資資料料料庫庫庫系系系統統統概概概論論論
範例 119: 以學校教務處行政為例,設置一成績報告關聯表(Grade-Report Relation),欄位
與內容如圖 6-2-1:
圖 6-2-1
討論
(1) 關 聯 表 架 構 (Grade-Report--Schema) 為 : (student-number, student-name,
major, course-number,course-title,instructor-name,instructor-location, grade)。
(2) 為了方便,將資料安置入內,在一個欄格內可能有多個資料(如 IS461 與
IS576 在同一欄格內),當讀取資料時,會因此而讀取到不確定之資料。
(3) 我們應設法變更 Grade-Report--Schema,使不再於同一欄格內有多個資料。
6-2-2 第一正規化型式(First Normal Form)概念
將方便關聯表(Unnormalized Relation) 各欄格內之資料單一化,其結果關聯表是謂 “第
一正規化型式(First Normal Form 1NF)”。
於圖 6-2-1,我們可確定欄位 student-number 為主索引鍵,亦即欄位 student-number 對其
他各欄位均有 “功能支配關係(Functional Dependency)”,有些書稱 “功能相依關係”,其表示
方式如圖 6-2-2-1:(註:在定義上,主索引鍵並不完全等於功能支配關係,請參考 6-3-1 節),
其中(student-number, student-name)為單值功能支配關係;(student-number, course)為多值功能
支配關係。
6-3
關聯資料庫概念 (Relational Database Concepts) 666
圖 6-2-2-1
為了消除欄格內之多個資料,我們應將關聯表調整成第一正規化型式 (First Normal
Form),方法是將關聯表分解成數個次關聯表,且都以原關聯表之主索引鍵為主索引。
範例 120: 以圖 6-2-1-Grade-Report Relation 為例,消除各欄格內之多個資料。
解答
(1) 欄 位 student-number 對 其 他 各 欄 位 均 有 功 能 支 配 關 係 (Functional
Dependency)。
(2) 以單多值功能支配關係分界,將圖 6-2-1- Grade-Report Relation 分解成另
兩個次關聯表:Student(如圖 6-2-2-2)與 Student-course(如圖 6-2-2-3),且都
以 student-number 為主索引鍵。
(3) 檢視圖 6-2-2-2 與圖 6-2-2-3,確定已消除各欄格內之多個資料。
圖 6-2-2-2
6-4
資資資料料料庫庫庫系系系統統統概概概論論論
圖 6-2-2-3
討論
觀察圖 6-2-2-3-Student-Course,其中欄位 student-number 有多個資料相同,2
組 49325、3 組 70284,均影響資料庫儲存空間。
6-2-3 第二正規化型式(Second Normal Form)概念
於關聯表中,如果其中某欄位有多個相同的資料,究其原因,該關聯表各欄位之間必有
“部份功能支配(Partial Function Dependency)” 的關係。如圖 6-2-3-1,欄位 student-number 對
其他各欄位均有功能支配關係;欄位 course-number 對 grade 有功能支配關係。
圖 6-2-3-1
我們可將具有 “部份功能支配(Partial Function Dependency)” 的關聯表再分解成多個關
聯表,各以具有 “部份功能支配” 的欄位為主索引鍵,但每兩個關聯表之間必須選擇其中一
個主索引鍵為共同欄位,其結果關聯表是謂 “第二正規化型式(Second Normal Form 2NF)”。
6-5
關聯資料庫概念 (Relational Database Concepts) 666 範例 121: 以 圖 6-2-2-3-Student-Course 為 例 , 消 除 部 份 功 能 支 配 (Partial Function
Dependency)” 關係。
解答
(1) 於圖 6-2-2-3,欄位 student-number 對其他各欄位均有功能支配關係;欄位
course-number 對 grade 有功能支配關係(如圖 6-2-3-1)。
(2) 將圖 6-2-2-3 分解成另兩個次關聯表: Registration(如圖 6-2-3-2)與
Course-Instructor(如圖 6-2-3-3)。
圖 6-2-3-2
圖 6-2-3-3
(3) 圖 6-2-3-2-Registration 以 student-number 為主索引鍵;圖 6-2-3-3-Course-
Instructor 以 course-number 為主索引鍵。兩者以 course-number 為共同欄位。
6-6
資資資料料料庫庫庫系系系統統統概概概論論論
討論
(1) 觀察圖 6-2-3-3-Student-Course,欄位 course-number 對 instructor-name 有功
能支配關係;欄位 instructor-name 對 instructor-location 有功能支配關係,
即欄位 course-number 對 instructor-location 有遞移功能支配關係(Transitive
Dependency),如圖 6-2-3-4。
圖 6-2-3-4
(2) 遞移功能支配關係(Transitive Dependency)可能會影響資料之流暢存取。
6-2-4 第三正規化型式(Third Normal Form)概念
當關聯表欄位有遞移功能支配關係(Transitive Dependency)時,隱約中會有多個索引鍵相
互牽扯,可能會影響資料之流暢存取。
如圖 6-2-4-1,欄位 key 對 A、B 有功能支配關係;欄位 A 對 B 有功能支配關係,即欄
位 key 對 B 有遞移功能支配關係(Transitive Dependency)。對 B 的內容而言,會隨著 A 的索引
性而牽制 key 之索引性。(請參考 7-5-4 節)
圖 6-2-4-1
我們可將具有 “遞移功能支配關係(Transitive Dependency)” 的關聯表再分解成多個關
聯表,各以造成 “遞移功能支配” 的欄位為主索引鍵,但每兩個關聯表之間必須選擇其中一
個主索引鍵為共同欄位,其結果關聯表是謂 “第三正規化型式(Third Normal Form 3NF)”。
6-7
關聯資料庫概念 (Relational Database Concepts) 666 範例 122: 以圖 6-2-3-3-Course-Instructor 為例,消除遞移功能支配關係 (Transitive
Dependency)。
解答
(1) 於圖 6-2-3-3-Student-Course,欄位 course-number 對 instructor-name 有功能
支配關係;欄位 instructor-name 對 instructor-location 有功能支配關係,即
欄位 course-number 對 instructor-location 有遞移功能支配關係(Transitive
Dependency),如圖 6-2-3-4。
(2) 將圖 6-2-3-3 分解成另兩個次關聯表:Course(如圖 6-2-4-2)與 Instructor(如
圖 6-2-4-3)。
(3) 圖 6-2-4-2-Course 以 course-number 為主索引鍵;圖 6-2-4-3-Instructor 以
instructor-number 為主索引鍵。兩者以 instructor-name 為共同欄位。
圖 6-2-4-2 圖 6-2-4-3
一般來言,資料庫設計到第三正規化型式(3NF)即已達到靈活流暢的存取要求,從上述
各範例(119~122),我們將關聯表 Grade-Report 分解成 4 個 3NF 次關聯表 Student、Registration、
Course、Instructor。因每兩個關聯表之間均有共同欄位,我們亦可依自然聯結(Natural Join)
法則,輕易地將這 4 個關聯表組合成 Grade-Report,而不會發生資料遺失或衝突等情事。
當然還有其他型式(如 4NF、Boyce-Codd) 用以處理其他特殊之設計,我們將於爾後繼續
介紹,在此 3NF 已足夠對一般資料庫關聯表作適當之設計。
6-9
關聯資料庫概念 (Relational Database Concepts) 6666-2-5 Boyce-Codd正規化型式
(Boyce-Codd Normal Form)概念
於第三正規化型式(3NF),其功能支配關係若有部份迴路架構(Partial Cycle),且左端有
候選索引鍵(Candidate Key),我們可將其中之迴路部份、與非迴路部份,分解成數組次關聯
表,此為 Boyce-Codd 正規化型式。(請參考 7-4-3 節範例 150、151)。
圖 6-2-5-1
設有一功能支配關係如圖 6-2-5-1,其中迴路部份為{A, C},我們可將其分解成三組 BCNF
次關聯架構:
Schema-1 = (B, D) Schema-2 = (C, A) Schema-3 = (B, C)
範例 123: 設有關聯表 ST-MAJ-INS 如圖 6-2-5-2,試証其有迴路功能支配關係,並描述如
何分解成 Boyce-Codd 正規化型式之關聯表。
圖 6-2-5-2
6-10
資資資料料料庫庫庫系系系統統統概概概論論論
解答
關聯表 ST-MAJ-INS 有功能支配關係如圖 6-2-5-3,其中{major, instructor} 是
迴路功能支配關係。
圖 6-2-5-3
依 Boyce-Codd 正規化型式要求,將關聯表 ST-MAJ-INS(如圖 6-2-5-2)分解成關
聯表 ST-INS 與關聯表 INS-MAJ(如圖 6-2-5-4)。其中 instructor 為共同欄位。
(a) (b) 圖 6-2-5-4
6-2-6 第四正規化型式(Fourth Normal Form)概念
於第三正規化型式(3NF),當關聯表呈現多值功能支配關係(Multivalued Dependencies)
時,關聯表將佔用無謂的空間,同時增加資料的存取時間,如圖 6-2-6-1。第四正規化型式(4NF)
是消除多值功能支配關係之關聯表。
6-11
關聯資料庫概念 (Relational Database Concepts) 666
圖 6-2-6-1
範例 124: 設有關聯表 COP-PAC-OUT 如圖 6-2-6-2,試証其有多值功能支配關係,並描
述如何分解成第四正規化型式(4NF)之關聯表。
圖 6-2-6-2
解答:關聯表 COP-PAC-OUT 有多值功能支配關係如圖 6-2-6-3。
圖 6-2-6-3
依第四正規化型式(4NF)要求,將關聯表 COP-PAC-OUT (如圖 6-2-6-2)分解成
關聯表 COM-PAC 與關聯表 COM-OUT (如圖 6-2-6-4)。其中 computer 為共同
欄位。
6-12
資資資料料料庫庫庫系系系統統統概概概論論論
(a) (b) 圖 6-2-6-4
6-3 功能支配關係(Functional Dependencies)
於 2-4 節,我們曾談到關聯表之各類索引鍵(keys),如超級索引鍵(Super Keys)、候選索
引鍵(Candidate Keys)、與主索引鍵(Primary Key)。而功能支配關係(Functional Dependency)即
是索引的關係,有些書稱功能相依關係,一個資料庫設計得好與壞,完全依賴功能支配關係
安排得好壞與否。
6-3-1 基礎概念(Basic Concepts)
於 2-4 節,我們曾描述 “認定一個具有 ‘獨一(Unique)’ 特性的屬性欄位(Attributes)作為
索引鍵,用以區隔各個實體”。在關聯表中所謂之實體即為 “資料組(Tuples)”。本節再以數學
式定義如下:
超級索引鍵 (Super Key)定義:令 r 為一合法關聯表 (Legal Relation),R 為其關聯表架構
(Schema),K 為超級索引鍵(Super Key),t1、t2 為其中之任意兩個資料組(Tuples),則:
if t1[K]=t2[K] then t1=t2 and if t1[K]≠t2[K] then t1≠t2
功能支配關係(Functional Dependency) 即是具有索引鍵功能的欄位與其他欄位間之關
係,其關係元為 “→”,如:
“α → β”
α 對 β 有功能支配關係(Functional Dependency),其中 α 為具有索引鍵功能的欄位,β
為其他欄位。凡是具有適當功能支配關係之關聯表是謂 “合法關聯表(Legal Relation)”。
6-13
關聯資料庫概念 (Relational Database Concepts) 666功能支配關係 (Functional Dependency)定義:令 r 為一合法關聯表(Legal Relation),R 為其
關聯表架構(Schema),α→β 為 α 對 β 之功能支配關係(Functional Dependency),t1、t2 為
其中兩個任意資料組(Tuples),則:
if t1[α]=t2[α] then t1[β]=t2[β]
將上述超級索引鍵(Super Key)、與功能支配關係(Functional Dependency) 兩定義比較,
前者有 “if t1[K]≠t2[K] then t1≠t2 ”;後者並無 if t1[α]≠t2[α] then t1[β]≠t2[β]。如圖 6-3-1-1:
圖 6-3-1-1
(1) M→O為真(True),因 if t1[M]=t2[M] then t1[O]=t2[O] 為真。其中 t1、t2 為任意資料組
(Tuples)。
(2) O→M為偽(False),當選擇 t1={m2, n3, o2, p3}、t2={m3, n3, o2, p4} 時,t1[O]=t2[O] =o2,
但 t1[M]=m2、t2[M] =m3,無法滿足 if t1[O]=t2[O] then t1[M]=t2[M]。
(3) MN→P為真(True),因 if t1[MN]=t2[MN] then t1[P]=t2[P]為真。
範例 125:以圖 3-4-2-3-Customer 為例,求其各欄位間之功能支配關係(Functional Dependency)。
解答
(1) 其資料表架構(Schema)為:
Customer-schema = (customer-name, street, customer-city)。
(2) 滿足(Satisfying) if t1[α]=t2[α] then t1[β]=t2[β] 之功能支配關係有:
Customer-name → street Customer-name → customer-city street → customer-city
6-14
資資資料料料庫庫庫系系系統統統概概概論論論
有些功能支配關係(Functional Dependency)被視為 “當然支配(be trivial)”,在任何關聯表
中都存在的功能支配關係:
(1) A → A:其中 A 為合法關聯表的一個欄位,必可滿足 if t1[A]=t2[A] then t1[A]=t2[A],
故 A → A 為真(True)。
(2) AB → A:其中 A、B 為合法關聯表的兩個欄位,必可滿足 if t1[A]=t2[A] then
t1[A]=t2[A],即可滿足 if t1[AB]=t2[AB] then t1[A]=t2[A],故 AB → A 為真(True)。
(3) if β⊆α then α→β:其中 α 是合法關聯表的一組欄位,β 是 α 中的一個或一組欄位,則
if β⊆α then α→β 為真。(參考範例 144)
這些被視為當然者的功能支配關係,在資料庫欄位設計上並無意義,故均不列為設計上
之依據。
在功能支配關係(Functional Dependency)上,我們應將其再嚴格地分為:滿足(Satisfying)
關係與常理(Holding)關係。
(1) 滿足 (Satisfying)關係:對一個關聯表來言,其中各欄位間都可滿足 if t1[α]=t2[α] then
t1[β]=t2[β] 測試之功能支配關係(Functional Dependency)。
(2) 常理 (Holding)關係:對一個關聯表來言,我們求得之功能支配關係 (Functional
Dependency),雖然可以滿足 if t1[α]=t2[α] then t1[β]=t2[β] 之測試,但不一定可以合乎
真實世界之關係。當同時滿足測試關係與真實世界關係時,是謂滿足 “常理關係”。
如範例 126 解釋:
範例 126: 比較範例 125,以圖 3-4-2-3-Customer 為例,求其各欄位間合於常理(Holding)
之功能支配關係(Functional Dependency)。
解答
(1) 其資料表架構(Schema)為:
Customer-schema = (customer-name, street, customer-city)。
(2) 滿足(Satisfying) if t1[α]=t2[α] then t1[β]=t2[β] 之功能支配關係為:
Customer-name → street Customer-name → customer-city street → customer-city
6-15
關聯資料庫概念 (Relational Database Concepts) 666(3) 觀察 street → customer-city,於圖 3-4-2-3-Customer 是一組合法的功能支
配關係,但並不適用於一般其他關聯表,因為我們了解,在真實世界裡,
相同名稱的街名可能出現在其他多個城市中。
(4) 故本例常理之功能支配關係為:
Customer-name → street Customer-name → customer-city
範例 127: 以圖 3-6-4-3-Branch、3-4-3-1-Deposit、3-4-1-1-Borrow 為例,求其各欄位間合
於常理(Holding)之功能支配關係(Functional Dependency)。
解答
先以 if t1[α]=t2[α] then t1[β]=t2[β] 測試各關聯表,再以真實世界之常理判斷。
(1) 如圖:3-6-4-3,Branch-schema = (branch-name, assets, branch-city),常理
之功能支配關係為:
branch-name → branch-city branch-name → assets
(2) 如圖 3-4-3-1,Deposit-schema = (branch-name, account-number,customer-name,
balance)
account-number → balance account-number → branch-name
某些銀行設立夫妻帳戶,即一個帳號(account-name)可能有兩個客戶名稱
(customer-name),故無 account-number → customer-name。
(3) 如圖 3-4-1-1,Borrow-schema = (branch-name, loan-number, customer-name,
amount)
loan-number → amount loan-number → branch-name
如(2)理由,故無 loan-number → customer-name。
6-16
資資資料料料庫庫庫系系系統統統概概概論論論
6-3-2 功能支配之內範圍關係集合 (Closure of a Set of Functional Dependencies)
設有條件關係 F,在合法限制(Legal Constrains)下,以 F 延伸出之其他條件關係為 F’,
其中 F∪F’ 是謂 “內範圍關係集合(Closure)”,以 F+ 表示。讀者可參考筆者著 “精緻離散數
學, 金禾 V603”。
範例 128: 設有一關聯表 R,其架構 R-schema = (O, P, Q, X, Y, Z ),已知具有功能支配關
係如下:
(a) O → P (b) O → Q (c) QX → Y (d) QX → Z (e) P → Y
試証(O → Y) ⊂ F+,其中 F+ = (O, P, Q, X, Y, Z )+。
解答
(f) 由式(a) 知 if t1[O]=t2[O] then t1[P]=t2[P] 為真。
(g) 由式(e) 知 if t1[P]=t2[P] then t1[Y]=t2[Y] 為真。
(h) 由式(f)與(g) 知 if t1[O]=t2[O] then t1[Y]=t2[Y] 為真。
即(O → Y) ⊂ F+ 為真。得証#
阿姆斯壯定律 (Armstrong’s Axioms):1974 年,阿姆斯壯提出有關功能支配之內範圍關係集
合(Closure of a Set of Functional Dependencies) 三法則(Rules):
(1) 反身法則 (Reflexivity Rule):if (β⊆α) then (α→β),其中 α 是合法關聯表的一組欄位,
β 是 α 中的一個或一組欄位。
(2) 擴充法則 (Augmentation Rule): if (α→β) then (γα→γβ),其中 α、β、γ 是合法關聯
表的一個或一組欄位。
(3) 遞移法則 (Transitivity Rule):if (α→β and β→γ) then (α→γ),其中 α、β、γ 是合法關
聯表的一個或一組欄位。
6-17
關聯資料庫概念 (Relational Database Concepts) 666在經驗上,阿姆斯壯定律(Armstrong’s Axioms)已被視為非常完整(Complete) 的定律,為
了更為便捷演繹,又延伸出另外三個法則如下,其中 α、β、γ、δ 是合法關聯表的一個或一組
欄位:
(4) 聯集法則 (Union Rule): if (α→β and α→γ) then (α→βγ)。
(5) 分解法則 (Decomposition Rule): if (α→βγ) then (α→β and α→γ)。
(6) 偽遞移法則 (Pseudotransitivity): if (α→β and γβ→δ) then (αγ→δ)。
範例 129: 比較範例 128,設有一關聯表 r,其架構 R-schema = (O, P, Q, X, Y, Z ),已知具
有功能支配關係如下:
(a) O → P (b) O → Q (c) QX → Y (d) QX → Z (e) P → Y
試求:關聯表架構 R 之功能支配內範圍關係集合(Closure of a Set of Functional
Dependencies) F+:
解答
(f) O → Y,如範例 128 已得証。
(g) QX → YZ,由式(c)、(d),以聯集法則(Union Rule) 得証。
(h) OX → Z,由式(b)、(d),以偽遞移法則(Pseudotransitivity) 得証。
本例之 F+ = {(a), (b), (c), (d), (e), (f), (g), (h) }。
6-3-3 欄位內範圍集合(Closure of Attribute Sets)
在功能支配關係(Functional Dependencies) 上,欄位之內範圍集合(Closure of Attribute
Sets) 可提供多項測試標的,如測試超級索引鍵、測試 α+ 等。
欄位內範圍演算法 (Algorithm-6-3-3):
result ← α; while (changes to result) do for each functional dependency β → γ in F do begin
6-18
資資資料料料庫庫庫系系系統統統概概概論論論
if β ⊆ result then result ← result∪γ; end
其中:
(1) α、β、γ 為關聯表 R 之一個或一組欄位。
(2) F 為關聯表之已知功能支配關係(Set of Functional Dependencies)。
(3) (β → γ) ⊆ F。
(4) result = α+。
演算法功能:
(1) 測試超級索引鍵,如果最後 result 包含關聯表 R 之所有欄位,則 α為 R 的超級索引鍵。
(2) 測試 α+ 之每一功能支配關係式 β → γ,如果 β ⊆ result,則該 β → γ 為合法之功能支
配關係式。
範例 130: 比較範例 129,設有一關聯表 r,其架構 R-schema = (O, P, Q, X, Y, Z ),已知具
有功能支配關係如下:
(a) O → P
(b) O → Q
(c) QX → Y
(d) QX → Z
(e) P → Y
試求:於關聯表架構 R,以欄位內範圍演算法(Algorithm 6-3-3)求取(OX)+ 之對
應欄位:
解答
依演算法 Algorithm-6-3-3 之步驟:
(1) result ← {O, X}。 因 (OX)+
(2) 於 while 式執行 loop:
(3) 於 for 式選擇 O → P。
(4) 因{O} ⊆ result 故 result ← P 得 result = { O, P, X }
且測試 O → P 成功
6-19
關聯資料庫概念 (Relational Database Concepts) 666(5) 於 for 式選擇 O → Q。
(6) 因{O} ⊆ result 故 result ← Q 得 result = { O, P, Q, X}
且測試 O → Q 成功
(7) 於 for 式選擇 QX → Y。
(8) 因{Q, X} ⊆ result 故 result ← Y 得 result = { O, P, Q, X, Y}
且測試 QX → Y 成功
(9) 於 for 式選擇 QX → Z。
(10) 因{Q, X} ⊆ result 故 result ← Z 得 result = { O, P, Q, X, Y, Z}
且測試 QX → Z 成功
(11) 於 for 式選擇 P → Y。
(12) 因{P} ⊆ result 故 result ← Y 得 result = { O, P, Q, X, Y, Z}
且測試 P → Y 成功
(13) 結束。
討論
(1) 因 result = { O, P, Q, X, Y, Z},已包含 R 之全部欄位,即表示(OX)已通過
測試為 R 之超級索引鍵(Super Key)。
(2) {O → P, O → Q, QX → Y, QX → Z, P → Y} 已通過測試為(OX)+ 之功能
支配關係式。 ‘
6-3-4 功能支配關係之簡化(Canonical Cover)
由前述,我們已知功能支配關係(Functional Dependencies)對關聯表(Relations) 之意義。
設有一關聯表 r(R),其中 r 為關聯表,R 為關聯表架構(Schema),且已知其功能支配關係為 F。
當我們更新 r 之架構 R 時,需再檢測原有之 F 是否仍適用於 R。
如果 F 是一組龐大且複雜的集合,檢測 F 將是費工費時,為了避免費工費時,我們另設
置一組 F 之簡化集合(Canonical Cover) Fc。Fc 包含所有 F 之功能支配關係,用於 F 之檢測替
身,使檢測工作便捷迅速。
6-20
資資資料料料庫庫庫系系系統統統概概概論論論
6-3-4-1 多餘欄位(Extraneous Attribute)
於功能支配關係 F 之集合,如果移除其中某關係式之欄位 B,並不影響 F 之整體功能支
配關係,則 B 是謂 “多餘欄位(Extraneous Attribute)”。
範例 131: 設有一關聯表 r,已知其功能支配關係為 F = {AB → C, A → C},試証 B 為“多
餘欄位(Extraneous Attribute)”。
解答
依 6-3-1 節功能支配關係 (Functional Dependency) 定義, if t1[α]=t2[α] then
t1[β]=t2[β]:
(1) 因 AB → C,故必有: if t1[AB]=t2[AB] then t1[C]=t2[C]
(2) 因 A → C,故必有: if t1[A]=t2[A] then t1[C]=t2[C]
比較(1)與(2),式(2)可完全取代式(1),故移除 B 並不影響 F 之整體功能支
配關係。本例得証#
並得:Fc = {A → C}。
6-3-4-2 多餘欄位之定義(Definition of Extraneous Attribute)
於範例 131,我們發現求取 Fc 並不是一件輕鬆的工作,在此我們先描述多餘欄位之定義,
再考量如何移除多餘欄位(Extraneous Attribute)。
設有功能支配關係 F,α→β ⊆ F,其中 α→β 為 F 之一個任意功能支配關係式,B 是其中
之欄位,則多餘欄位(Extraneous Attribute)之定義如下:
1. 如果欄位 B∈α,且(F – {α → β})∪{(α – B) → β} 為真,則 α→β 內之 B 為多餘欄位
(Extraneous Attribute)。
6-21
關聯資料庫概念 (Relational Database Concepts) 666 範例 132: 比較範例 131,設有一關聯表 r,已知其功能支配關係為 F = {AB → C, A → C},
試証 AB → C 內之 B 是 “多餘欄位(Extraneous Attribute)”。
解答
依本節項 1 描述,令{α → β}為 {AB → C }。
則: (a) F – {α → β} = {AB → C, A → C} – {AB → C}
= { A → C}
(b) {(α – B) → β} = {(AB – B) → C}
= { A → C}
即:(a)∪(b) = { A → C} 符合 F 之功能支配關係,故為真。
亦即:AB → C 內之 B 是 “多餘欄位”。得証#
得 Fc = {A → C}。
2. 如果欄位 B∈β,且(F – {α → β})∪{α → (β – B)} 為真,則 α→β 內之 B 為多餘欄位
(Extraneous Attribute)。如果 F 有{α1 → β1, α1 → β2 },則須先以聯集法則合成 α1 → β1β2。
範例 133: 設有一關聯表 r,已知其功能支配關係為 F = {A →BC, A → C},試証 A →BC
內之 B 為“多餘欄位(Extraneous Attribute)”。
解答
依本節項 2 描述,如果 F 有{α1 → β1, α1 → β2 },則須先以聯集法則合成 α1 →
β1β2。
本例 F = {A →BC, A → C},可以聯集法則合成 A → BC。
{A → BC} 已是最簡化之 F,無需再繼續簡化。
範例 134: 設有一關聯表 r,已知其功能支配關係為 F = {A → BC, B → C },試証 A → BC
內之 C 為 “多餘欄位(Extraneous Attribute)”。
解答
依本節項 2 描述,令{α → β}為 {A →BC }。
則: (a) F – {α → β} = {A →BC, B → C} – {A → BC}
= { B → C}
6-22
資資資料料料庫庫庫系系系統統統概概概論論論
(b) {α → (β– B)} = {A → (BC – C)}
= { A → B}
即:(a)∪(b) = {A → B, B → C} 符合 F 之功能支配關係。
亦即:A → BC 內之 C 為 “多餘欄位”,得証#
得 Fc = {A → B, B → C}。
6-3-4-3 多餘欄位之測試(Test for Extraneous Attribute)
於前節 6-3-4-2,我們已詳細描述多餘欄位之定義,面對簡單的功能支配關係(如範例
132、133),判斷其多餘欄位並不困難,但如果面對複雜的功能支配關係,却仍是一件非常困
難的工作。本節將探討如何執行多餘欄位之測試。
設有功能支配關係 F,α→β ⊆ F,其中 α→β 為 F 之一個任意功能支配關係式,B 是其中
之欄位,則多餘欄位(Extraneous Attribute) 之測試如下:
1. 如果 B∈β,測試 B 是否為多餘欄位?
令 F’ = (F – {α → β})∪{α → (β – B)}
測試由 F’ 內之各功能支配關係式,是否可推演出 α → B?
如果可,則 β 內之 B 是多餘欄位。
測試方法:如 6-3-3 節之欄位內範圍演算法(Algorithm 6-3-3),測試於 F’ 內推演 α+,如
果 result 包含 B,則 β 內之 B 是多餘欄位。
範例 135: 比較範例 134,設有一關聯表 r,已知其功能支配關係為 F = {A → BC, B →
C },試証 A → BC 內之 C 為 “多餘欄位(Extraneous Attribute)”。
解答
依本節項 1 描述:
F’ = (F – {α → β})∪{α → (β – B)} =({A → BC, B → C} – {A → BC})∪{A → (BC – C)} =({ B→ C})∪{ A → B} ={ A → B, B → C}
測試方法:如 6-3-3 節之欄位內範圍演算法(Algorithm 6-3-3),測試於 F’ 內推
演(A)+,如果 result 包含 C,則{A → BC} 內之 C 是多餘欄位。
6-23
關聯資料庫概念 (Relational Database Concepts) 666內範圍演算法 (Algorithm 6-3-3):
result ← {A}。 因 (A)+
於 while 式執行 loop:
於 for 式選擇 A → B。
因{A} ⊆ result 故 result ← B 得 result = { A, B }
且測試 A → B 成功。
於 for 式選擇 B → C。
因{A, B} ⊆ result 故 result ← C 得 result = { A, B, C }
且測試 B → C 成功。
結束。
結論:因 result 包含 C,故 A → BC 內之 C 是多餘欄位。
2. 如果 B∈α,測試 B 是否為多餘欄位?
令 γ = α – {B}
測試由 F 內之各功能支配關係式,是否可推演出 γ → β?
如果可,則 α 內之 B 是多餘欄位。
測試方法:如 6-3-3 節之欄位內範圍演算法(Algorithm 6-3-3),測試於 F 內推演 γ+,如果
測試 γ → β 成功,則 α 內之 B 是多餘欄位。
範例 136: 設有一關聯表 r,已知其功能支配關係為 F = {AB → C, B → C},試証 AB → C
內之 A 為“多餘欄位(Extraneous Attribute)”。
解答
依本節項 2 描述:
令 γ =α – {A}
= AB – {A}
= B
測試方法:如 6-3-3 節之欄位內範圍演算法(Algorithm 6-3-3),測試於 F 內推演
(B)+,如果測試 B → C 成功,則 AB → C 內之 A 是多餘欄位。
6-24
資資資料料料庫庫庫系系系統統統概概概論論論
內範圍演算法 (Algorithm 6-3-3):
result ← {B}。 因(B)+
於 while 式執行 loop:
於 for 式選擇 B → C。
因{B} ⊆ result 故 result ← C 得 result = { A, C }
且測試 B → C 成功
結束。
結論:因測試 B → C 成功,故 AB → C 內之 A 是多餘欄位。
6-3-4-4 功能支配關係之簡化演算法(Algorithm for Canonical Cover)
如前述,為了便捷功能支配關係 F 之測試,我們可將 F 簡化 (Simplify)成簡化集合
(Canonical Cover) Fc。Fc 包含所有 F 之原有功能支配關係,用於 F 之檢測替身,使檢測工作
便捷迅速。Fc 之特性(Properties) 有:
(1) Fc 不得包含多餘欄位(Extraneous Attribute)。
(2) Fc 所屬各式之左端必為唯一(Unique)。即:
如果有 α1→β1 ⊆ Fc and α2→β2 ⊆ Fc,則 α1≠α2
功能支配關係簡化演算法 (Algorithm-6-3-4-4):
Fc ← F while (Fc change) use the Union-Rule to replace any Dependencies in Fc of the form α1 → β1 and α1 → β2 with α1 → β1β2 find a functional dependency α → β in Fc with an extraneous attribute either in α or in β if an extraneoue attribute is found, delete it from α → β end while
6-25
關聯資料庫概念 (Relational Database Concepts) 666 範例 137: 設有一關聯表 r,關聯表架構(Schema)為(A, B, C),已知其功能支配關係 F 為:
A → BC
B → C
A → B
AB → C
試求:F 之簡化功能支配關係 Fc。
解答
依演算法 Algorithm-6-3-4-4 之步驟:
Fc ← {A → BC, B → C, A → B, AB → C}
while 第 1 次執行:
(1) 選取 Fc 內左端相同之關係式 A → BC、A → B,以聯集法則(Union-Rule 如
6-3-2 節阿姆斯壯定律項(4)) 將兩式合成為 A → BC。
此時 Fc = {A → BC, B → C, AB → C}。
(2) 測試多餘欄位,選取 Fc 內關係式 AB → C、B → C,依 6-3-4-3 節項 2 與
範例 136,測試得 AB → C 內之 A 是多餘欄位,應將 AB →C 簡化成 B →
C。
此時 Fc = {A → BC, B → C}。
While 第 2 次執行:
(3) 測試多餘欄位,選取 Fc 內關係式 A → BC, B → C,依 6-3-4-3 節項 1 與範
例 135,測試得 A → BC 內之 C 是多餘欄位,應將 A → BC 簡化成 A → B。
此時 Fc = {A → B, B → C}。
end while
本例得 Fc = {A → B, B → C}。
6-26
資資資料料料庫庫庫系系系統統統概概概論論論
6-4 習題(Exercises)
1. 何謂 “第一正規化型式(First Normal Form 1NF)”?
2. 如何消除欄格內之多個資料?
3. 何謂 “部份功能支配(Partial Function Dependency)” 的關係?
4. 何謂 “第二正規化型式( Second Normal Form 2NF)”?
5. 何謂 “第三正規化型式(Third Normal Form 3NF)”?
6. 何謂 “Boyce-Codd 正規化型式”?
7. 何謂 “第四正規化型式(Fourth Normal Form 4NF)”?
8. 何謂 “功能支配關係(Functional Dependency)”?
9. 在任何關聯表中都存在的功能支配關係有那些?
10. 滿足(Satisfying)關係與常理(Holding)關係之差異為何?
11. 何謂 “內範圍關係集合(Closure)”?
12. 何謂 阿姆斯壯定律(Armstrong’s Axioms)?
13. 試述多餘欄位(Extraneous Attribute)之定義。
14. 如何執行多餘欄位之測試?