關聯資料庫概念 (relational database...

28
6-0 ( ( R R e e l l a a t t i i o o n n a a l l D D a a t t a a b b a a s s e e C C o o n n c c e e p p t t s s ) ) 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) C C C H H H A A A P P P T T T E E E R R R

Upload: others

Post on 22-Jan-2020

18 views

Category:

Documents


0 download

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-8

資資資料料料庫庫庫系系系統統統概概概論論論

圖 6-2-4-4

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. 如何執行多餘欄位之測試?

6-27

關聯資料庫概念 (Relational Database Concepts) 666