• 沒有找到結果。

ch05關聯表的正規化

N/A
N/A
Protected

Academic year: 2021

Share "ch05關聯表的正規化"

Copied!
68
0
0

加載中.... (立即查看全文)

全文

(1)

第5章 關聯表的正規化

5-1 正規化的基礎

5-2 功能相依

5-3 第一階到第三階正規化型式

5-4 多重值相依與第四階正規化型式

5-5 合併相依與第五階正規化型式

(2)

5-1 正規化的基礎

5-1-1 關聯表為什麼需要正規化

5-1-2 正規化的型式

(3)

5-1 正規化的基礎

 「正規化」(Normalization)是一種標準處理程序來決定 關聯表應該擁有哪些屬性,其目的是建立「良好結構關聯 表」(Well-structured Relation),一種沒有重複資料的關 聯表。而且在新增、刪除或更新資料時,不會造成錯誤或 資料不一致的異常情況。正規化目的如下所示: • 去除重複性(Eliminating Redundancy):建立沒有重複 資料的關聯表,因為重複資料不只浪費資料庫的儲存 空間,而且會產生資料維護上的問題。 • 去除不一致的相依性(Eliminating Inconsistent Dependency):資料相依是指關聯表中的屬性之間擁 有關係,如果關聯表擁有不一致的資料相依,這些屬 性就會在新增、刪除或更新資料時,造成異常情況。

(4)

5-1-1 關聯表為什麼需要正規化 –

非正規化型式關聯表

 關聯式資料庫正規化的目的以一句話來說,就是避免資料 重複,關聯表擁有非自然結合的屬性,就會造成資料重複 的問題,稱為「非正規化型式」(Unnormalized Form)關 聯表。

(5)

5-1-1 關聯表為什麼需要正規化 –

更新異常

 更新異常(Update Anomaly)是在Student_Course_Classes關 聯表更新指定的屬性資料,因為資料重複儲存在多筆值組 (記錄),所以需要同時更新多筆值組的資料。 需要更改4筆值組

(6)

5-1-1 關聯表為什麼需要正規化 –

刪除異常

 刪除異常(Deletion Anomaly)是在Student_Course_Classes關 聯表刪除值組,可能刪除合法資料。例如:CS101和CS121 課程都有一筆值組,如下所示: 刪除值組連同課程資料也一併遺失

(7)

5-1-1 關聯表為什麼需要正規化 –

新增異常

 新增異常(Insertion Anomaly)是在Student_Course_Classes關 聯表新增值組和刪除相反,可能只新增部分值組的資料。 例如:新增一筆值組,課程編號是CS240,名稱為資料結 構,學分是3,如下所示: 新增值組只有課程資料,主鍵 sid是空值,違反實體完整性

(8)

5-1-2 正規化的型式 – 說明

 正規化是從下而上(Bottom-Up)評估關聯表綱要是否符合 正規化型式,針對的是關聯表 中各屬性間的關係,正規化型 式是一些組織關聯表屬性的規 則。  正規化的處理過程分為五個階 段的正規化型式,每一階正規 化型式是在處理不同屬性間資 料相依(Dependency)的問題 ,如右圖所示:

(9)

5-1-2 正規化的型式 – 五階正規化

 第一階正規化型式(First Normal Form;1NF):在關聯表刪除多重值

和複合屬性,讓關聯表只擁有單元值屬性。

 第二階正規化型式(Second Normal Form;2NF):滿足1NF且關聯表

沒有「部分相依」(Partial Dependency)。

 第三階正規化型式(Third Normal Form;3NF):滿足2NF,而且關聯

表沒有「遞移相依」(Transitive Dependency)。

 Boyce-Codd正規化型式(Boyce-Codd Normal Form;BCNF):廣意第

三階正規化型式,關聯表如果擁有多個複合候選鍵,需要刪除候選鍵 間的功能相依。

 第四階正規化型式(Fourth Normal Form;4NF):滿足BCNF且沒有

多重值相依。

 第五階正規化型式(Fifth Normal Form;5NF):滿足4NF且沒有合併

(10)

5-2 功能相依

5-2-1 功能相依的定義

5-2-2 功能相依的種類

5-2-3 找出關聯表的所有功能相依

5-2-4 阿姆斯壯推論規則

(11)

5-2 功能相依

功能相依(Functional Dependency;FD)是描述關

聯表中屬性間的相依關係,這是關聯表正規化的

基礎。簡單的說,關聯表正規化的第一步,就是

在關聯表找出所有屬性間的功能相依。

當在關聯表找出所有屬性間的功能相依後,就可

以幫助我們在關聯表找出:

• 重複資料:一些不該屬於此關聯表的屬性。 • 候選鍵和主鍵:如果關聯表的所有屬性都功能相依於 一個或一組屬性,此屬性就是候選鍵(Candidate Key) 或主鍵(Primary Key)。

(12)

5-2-1 功能相依的定義 – 定義

 功能相依是同一個關聯表屬性間的關係,其定義如下所示 : 定義5.1:功能相依(Functional Dependency)以關聯表R為例 ,若關聯表R擁有屬性A與B,A與B可以是複合屬性,我們 可以說屬性B功能相依(Functional Dependent)於A,或A 功能決定(Functional Determines)B,寫成: R.A→R.B 或簡寫成: A→B 若關聯表R擁有A→B的功能相依,則在關聯表R的每一對t1和 t2值組且t1(A) = t2(A),可以得到:t1(B) = t2(B)。

(13)

5-2-1 功能相依的定義 – 說明

在關聯表中如果有兩個值組的屬性A是相同的,就

可以知道屬性B的值也一定相同。換句話說,如果

知道屬性A的值,就可以知道屬性B的值。

功能相依是一種屬性間的關係,對比實體關聯圖

中,就是實體的一對一,一對多、多對一和多對

多關聯性,如下所示:

A1→B1

A1→{ B1, B2, …Bn }

{ A1, A2, …, An }→B1

{ A1, A2, …, An }→{ B1, B2, …Bn }

(14)

5-2-1 功能相依的定義 – 範例

 例如:學生Students關聯表擁有sid、name、birthday和tel 屬性,一些功能相依範例,如下所示:

sid→birthday sid→tel

sid→{ name, birthday }

sid→{ name, birthday, tel }

(15)

5-2-2 功能相依的種類 – 說明

 功能相依的種類可以分為三種:完全相依、部分相依和遞 移相依。在本節使用的範例是將第3-5節的Students、 Courses和Instructors關聯表硬結合成 Student_Course_Instructors關聯表(新增講師辦公室office 屬性),如下圖所示:

(16)

5-2-2 功能相依的種類 – 完全相依

完全相依(Full Dependency)是指如果屬性A(複

合屬性)和B是關聯表屬性,B功能相依於A,而

且B沒有功能相依於任何A的子集,則稱B完全功

能相依於A。

例如:Student_Course_Instructors關聯表的完全相

依,如下所示:

sid→name

c_no→title

eid→instructor

eid→office

(17)

5-2-2 功能相依的種類 – 部分相依

部分相依(Partial Dependency)是指如果屬性A(

複合屬性)和B是關聯表的屬性,B功能相依於A

,如果從A中刪除部分屬性後的子集合,仍然不會

影響功能相依,則稱B部分相依於A。

例如:Student_Course_Instructors關聯表的部分相

依,如下所示:

{ sid, c_no }→name

{ sid, c_no}→title

(18)

5-2-2 功能相依的種類 – 遞移相依

 如果A、B和C是關聯表的屬性,A→B且B→C,則稱C是遞移 相依(Transitive Dependency)於A,A→C。例如:

Student_Course_Instructors關聯表的遞移相依,如下所示 :

{ sid, c_no, eid }→office

office屬性是遞移相依於{ sid, c_no, eid },因為:

{ sid, c_no, eid }→instructor instructor→office

(19)

5-2-3 找出關聯表的所有功能相依

一般來說,我們可以使用兩種演算法找出所有的

功能相依,如下所示:

• 暴力演算法(Brute Force Algorithm):一種破解密碼 常用的演算法,以作苦工方式嘗試所有可能的密碼組 合,也就是說,在關聯表找出各屬性間的所有可能組 合,然後一一檢查是否符合功能相依,如果關聯表的 屬性很多,相對的,就需花費很多時間來找出。 • 推論基礎演算法(Inference-based Algorithm):因為功 能相依可以由其他功能相依來推論出。換句話說,推 論基礎演算法是從關聯表已知的功能相依,使用推論 規則推論出所有可能的功能相依。

(20)

5-2-4 阿姆斯壯推論規則 – 說明

 關聯表R如果擁有一些功能相依F,「F封閉性」(Closure of F)寫成F+,F+是F本身和由其所推論出的所有功能相依 的聯集。換句話說,F+是功能相依F,再加上從F推論出的 所有功能相依的集合,而使用的推論規則就是「阿姆斯壯 推論規則」(Amstrong’s Inference Rule)。

 阿姆斯壯推論規則可以從某些關聯表已知的功能相依推論 出其他隱含的功能相依,這是一種建全且完整的規則,其 意義如下所示: • 建全(Sound):阿姆斯壯推論規則不會導出多餘的功 能相依。 • 完整(Complete):阿姆斯壯推論規則可以導出所有的 功能相依。

(21)

5-2-4 阿姆斯壯推論規則 – 種類

W. W. Armstrong在1974年提出三種推論規則,再

加上依此擴充出另外兩種規則:分解和聯集規則

,如下所示:

• 反身規則。

• 擴充規則。

• 遞移規則。

• 分解規則。

• 聯集規則。

(22)

5-2-4 阿姆斯壯推論規則 – 反身規則

反身規則(Reflexitivity Rule)是如果屬性B是屬

性A的子集合,則A→B,其定義如下:

若:{ B1, B2, …, Bn } { A1, A2, …., An }

則:{ A1, A2, …., An }→{ B1, B2, …, Bn }

反身規則的圖例,如下圖所示:

(23)

5-2-4 阿姆斯壯推論規則 – 擴充規則

 擴充規則(Augmentation Rule)是如果A→B且屬性C是屬 性D的子集合,則AD→BC,其定義如下:

若:{ A1, A2, …., An }→{ B1, B2, …, Bn }且{ C1, …, Cn } { D1, ..., Dn }

則:{ A1, A2, …., An, D1, …, Dn }→{ B1, B2, …, Bn , C1, ..., Cn }  擴充規則的圖例,A→B依反身規則就是B A,如下圖所示

(24)

5-2-4 阿姆斯壯推論規則 – 遞移規則

遞移規則(Transitivity Rule)是如果A→B且B→C,

則A→C,其定義如下:

若:{ A1, …, An }→{ B1, …, Bn }且{ B1, …, Bn }→{ C1, ..., Cn } 則:{ A1, ..., An }→{ C1, ..., Cn }

遞移規則的圖例,如下圖所示:

(25)

5-2-4 阿姆斯壯推論規則 – 分解規則

分解規則(Decomposition Rule)是如果A→BC,

則A→B且A→C,其定義如下:

若:{ A1, …, An }→{ B1, …, Bn, C1, ..., Cn } 則:{ A1, ..., An }→{ B1, ..., Bn }且{ A1, ..., An }→{ C1, ..., Cn }

分解規則的圖例,如下圖所示:

(26)

5-2-4 阿姆斯壯推論規則 – 聯集規則

聯集規則(Union Rule)是如果A→B且A→C,則

A→BC,其定義如下:

若:{ A1, …, An }→{ B1, …, Bn }且{ A1, …, An }→{ C1, ..., Cn } 則:{ A1, ..., An }→{ B1, ..., Bn, C1, ..., Cn }

聯集規則的圖例,如下圖所示:

(27)

5-2-4 阿姆斯壯推論規則 – 範例

現在我們只需使用阿姆斯壯推論規則,就可以從

關聯表現有的功能相依推論出其他功能相依。例

如:關聯表擁有已知的三條功能相依,如下所示

1: AB→D 2: BD→E 3: E→C

請使用上述三條功能相依推論出AB→C。

(28)

5-2-4 阿姆斯壯推論規則 – 推論過程

AB  步驟 使用規則 結果 1 使用第一個FD:AB→D AB→D 2 A B使用反身規則 AB→AB 3 以步驟2:AB→AB使用分解規則 AB→B 4 以步驟1:AB→D和步驟3:AB→B使用聯集規則 AB→BD 5 以步驟4:AB→BD和第2個:BD→E使用遞移規則 AB→E 6 以步驟5:AB→E和第3個:E→C使用遞移規則 AB→C 

(29)

5-3 第一階到第三階正規化型式

5-3-1 第一階正規化型式 – 1NF

5-3-2 第二階正規化型式 – 2NF

5-3-3 第三階正規化型式 – 3NF

5-3-4 Boyce-Codd正規化型式 – BCNF

5-3-5 符合Boyce-Codd正規化型式的範例

(30)

5-3-1 第一階正規化型式 – 1NF(定義)

第一階正規化型式是在處理關聯表本身,並沒有

解決任何關聯表存在功能相依所造成的資料重複

或操作異常等問題。其定義如下所示:

定義5.2:關聯表R符合第一階正規化型式(First

Normal Form;1NF)是指關聯表的每一個定義域

(Domain)都是單元值(Atomic Value)且只能是

單元值,也就是刪除多重值屬性型態(Multi-value

Attribute Type)與複合屬性型態(Composite

Attribute Type)的屬性。

簡單的說,上述定義是指關聯表沒有多重值和複

合屬性。

(31)

5-3-1 第一階正規化型式 – 1NF(範例)

刪除複合屬性只需將組成的單元值屬性展開,刪

除多重值屬性比較複雜,我們可以將屬性分割成

關聯表、值組或屬性。例如:Students關聯表儲存

學生的選課資料,主鍵是學號sid,如下圖所示:

(32)

5-3-1 第一階正規化型式 – 1NF

(方法一:分割成不同的關聯表)

關聯表如果擁有多重值屬性違反1NF,第一階正規

化可以將多重值屬性連同主鍵分割成新的關聯表

,如下圖所示:

(33)

5-3-1 第一階正規化型式 – 1NF

(方法二:分割成值組)

第一階正規化可以將多重值屬性改成重複值組,

將屬性的每一個多重值都新增一筆值組,如下圖

所示:

(34)

5-3-1 第一階正規化型式 – 1NF

(方法三:分割成不同屬性)

第一階正規化還可以將多重值屬性配合空值,分

割成為關聯表的多個屬性,不過,其先決條件是

多重值個數是有限的。例如:一位學生規定只能

修兩門課程(為了方便說明,筆者刪除講師與教

室部分的屬性),如下圖所示:

(35)

5-3-2 第二階正規化型式 – 2NF(定義)

 第二階正規化的目的是讓每一個關聯表只能儲存同類資料 ,也就是單純化關聯表儲存的資料。當關聯表符合1NF後 ,就可以進行第二階正規化,其定義如下所示:

定義5.3:關聯表R符合第二階正規化型式(Second

Normal Form;2NF)是指關聯表符合1NF,而且所

有非主鍵(Primary Key)的屬性都完全相依(

Fully Dependency)於主鍵,也就是刪除所有部份

相依的屬性。

 上述定義是指關聯表中,不是主鍵的屬性需要完全相依於 主鍵;反過來說,就是刪除關聯表所有部分相依(Partial Dependency)的屬性。

(36)

5-3-2 第二階正規化型式 – 2NF(範例)

 當執行學生選課資料關聯表的第一階正規化後,目前關聯 表已經分割成Students和Classes兩個關聯表。接著繼續執 行Classes關聯表的第二階正規化,如下圖所示:

(37)

5-3-2 第二階正規化型式 – 2NF

(功能相依)

Classes關聯表的主鍵是(sid, c_no, eid),關聯表已

知的功能相依,如下所示:

FD1:{ sid, c_no, eid }→room FD2:c_no→title

(38)

5-3-2 第二階正規化型式 – 2NF

(正規化結果)

 將功能相依c_no→title和eid→{ instructor, office }兩邊屬性 獨立成關聯表,左邊剩下的屬性就是新關聯表的主鍵,如 下圖所示:

(39)

5-3-3 第三階正規化型式 – 3NF(定義)

 第三階正規化的目的是移除哪些不是直接功能相依於主鍵 的屬性,這些屬性是借由另一個屬性來功能相依於主鍵。 當關聯表符合2NF後,就可以進行第三階正規化,其定義 如下所示: 定義5.4:關聯表R符合第三階正規化型式(Third Normal Form;3NF)是指關聯表符合2NF,而且所有非主鍵( Primary Key)的屬性都只能功能相依(Functional Dependency)於主鍵;沒有功能相依於其他非主鍵的屬性 ,即刪除遞移相依的屬性。  上述定義是指關聯表中不屬於主鍵的屬性都只能功能相依 於主鍵,而不能同時功能相依於其他非主鍵的屬性,即刪 除關聯表所有遞移相依(Transitive Dependency)。

(40)

5-3-3 第三階正規化型式 – 3NF(範例)

例如:請繼續第5-3-2節的關聯表,執行Instructors

(41)

5-3-3 第三階正規化型式 – 3NF

(找出遞移相依)

Instructors關聯表已知的功能相依,如下所示:

eid→office eid→o_no o_no→office

上述第office屬性功能相依於eid主鍵,它是借由倒

數第o_no屬性功能相依於eid和office屬性功能相依

於o_no屬性所得到,所以eid→office是遞移相依,

如下圖所示:

(42)

5-3-3 第三階正規化型式 – 3NF

(正規化結果)

在執行第三階正規化時,就是將造成遞移相依的

A→B功能相依兩邊的屬性獨立成關聯表,左邊的

屬性就是新關聯表的主鍵,如下圖所示:

(43)

5-3-4 Boyce-Codd正規化型式 –

BCNF(說明)

 Boyce-Codd正規化型式可以視為一種更嚴格的第三階正規 化型式,其目的是保證關聯表的所有屬性都功能相依於侯 選鍵。Boyce-Codd正規化可以讓所有屬性都完全功能相依 於候選鍵,而不是候選鍵的部分屬性。  換句話說,Boyce-Codd正規化是在處理關聯表擁有多個候 選鍵的特殊情況,在Boyce-Codd正規化處理的關聯表至少 需要擁有二個或更多個候選鍵,且這兩個候選鍵是: • 複合候選鍵。 • 在複合候選鍵之間擁有重疊屬性,也就是說至少擁有 一個相同屬性。

(44)

5-3-4 Boyce-Codd正規化型式 –

BCNF(定義)

BCNF正規化型式的定義,如下所示:

定義5.5:關聯表R符合BCNF正規化型式(Boyce-Codd Normal Form;BCNF)是指關聯表所有主要

的功能相依A→B,A一定且只可以是候選鍵(

Candidate Keys),也就是刪除只功能相依候選鍵

部分屬性的功能相依。

簡單的說,上述定義是指關聯表中,主要功能相

依A→B的左邊屬性A稱為「決定屬性」(

Determinant),決定屬性一定是候選鍵或主鍵。

(45)

5-3-4 Boyce-Codd正規化型式 –

BCNF(範例)

 例如:學生身份證字號(SSN)與成績(grade)的 Students關聯表,在Students關聯表擁有兩個候選鍵( sid, c_no )和( SSN, c_no ),如下圖所示: 兩個候選鍵擁有重疊 屬性c_no,在候選鍵之 間擁有功能相依 SSN→sid

(46)

5-3-4 Boyce-Codd正規化型式 –

BCNF(正規化結果)

例如:執行前述的關聯表Students關聯表的BCNF

正規化,如下圖所示:

使用SSN屬性 進行分割 使用sid屬性進 行分割

(47)

5-3-5 符合Boyce-Codd正規化型式

的範例 – 說明

 Boyce-Codd正規化型式的條件是關聯表至少擁有二個或多 個複合候選鍵,不過,關聯表擁有兩個複合候選鍵,並不 表示一定需要進行BCNF正規化,兩個複合候選鍵的關聯表 仍然可能符合BCNF。  例如:學生期末考座位的Exams關聯表,因為期末考分成 多天進行考試,所以學生各科的考試座位可能不同,如下 圖所示:

(48)

5-3-5 符合Boyce-Codd正規化型式

的範例 – 範例說明

 在Exams關聯表有兩個候選鍵,如下所示: ( sid, c_no ) ( seat_no, c_no )  兩個候選鍵擁有重疊屬性c_no,在候選鍵之間並沒有功能 相依seat_no→sid,例如:seat_no屬性值C121-03,同時有 S001和S003兩位學生在不同科目進行考試。在Exams關聯 表擁有的功能相依清單,如下所示:

{ sid, c_no }→seat_no { seat_no, c_no }→sid

 因為功能相依的決定屬性都是候選鍵,符合BCNF定義。 Exams關聯表雖然擁有兩組候選鍵,但是關聯表不但符合 3NF,而且符合BCNF。

(49)

5-4 多重值相依與第四階正規化型式

5-4-1 多重值相依(Multi-valued Dependency)

5-4-2 第四階正規化型式 – 4NF

(50)

5-4-1 多重值相依 – 說明

第四階正規化型式的基礎是「多重值相依」(

Multi-valued Dependency;MVD),這是1977年R.

Fagin所提出,屬於功能相依的推廣定義,或是說

,功能相依是多重值相依的一種特例。

多重值相依(Multi-valued Dependency)的先決條

件是關聯表擁有3個以上屬性,因為多重值相依的

定義有些複雜,我們準備使用一個關聯表範例來

說明多重值相依。

(51)

5-4-1 多重值相依 – 範例

例如:一門課可能由多位講師授課,每一門課可

以使用多本教課書,儲存這些資料的

Course_Instructor_Textbook關聯表,簡稱為CIT,

如下圖所示:

(52)

5-4-1 多重值相依 – 定義

定義5.6:多重值相依(Multi-valued Dependency)以關聯表R為例,若關 聯表R是由屬性A、B與C組成R(A, B, C),A、B與C可以是複合屬性,則 屬性B多重值相依(Multi-valued Dependent)於A,或A多重決定( Multi-determines)於B,寫成: R.A→→R.B 或簡寫成: A→→B 若關聯表R擁有A→→B多重值相依,則表示存在t1和t2值組且t1(A) = t2(A) ,且另外存在二個值組t3和t4滿足下列條件:

t1(A) = t2(A) = t3(A) = t4(A) t3(B) = t1(B)

t3(C) = t2(C) t4(B) = t2(B) t4(C) = t1(C)

(53)

5-4-1 多重值相依 – 定義說明

多重值相依的定義有些複雜,以CIT關聯表為例,

因為關聯表CIT擁有course→→textbook(A→→B)

多重值相依,所以在關聯表可以找到交換

instructor屬性的2對值組t1、t2和t3、t4,如下圖

所示:

(54)

5-4-1 多重值相依 – 異常狀況

 在CIT關聯表擁有很多重複資料,這些重複資料會導致新增 或更新異常,例如:新增講師陳慶新教授程式語言這門課 ,雖然只有一門課,但是需要同時新增3筆值組,每一個 值組是一本教課書,否則就會產生資料不一致的問題。

(55)

5-4-1 多重值相依 – 推論規則1

 多重值相依的推論規則是1977年C. Beeri、R. Fagin和J. H. Howard擴充自阿姆斯壯推論規則,其中前3個推論規是源 自功能相依,如下所示: • FD反身規則(FD Reflexitivity):如果屬性B是屬性A的 子集合,則A→B。 • FD擴充規則(FD Augmentation):如果A→B且屬性C是 屬性D的子集合,則AD→BC。 • FD遞移規則(FD Transitivity):如果A→B且B→C,則 A→C。 • MVD擴充規則(MVD Augmentation):如果A→→B且 屬性C是屬性D的子集合,則AD→→BC。 • MVD遞移規則(MVD Transitivity):如果A→→B且 B→→C,則A→→C – B。

(56)

5-4-1 多重值相依 – 推論規則2

• MVD互補規則(MVD Complementation):如果A→→B,則 A→→(R – A – B)。 • MVD聯集規則(MVD Union):如果A→→B且A→→C,則A→→BC 。 • MVD分解規則(MVD Decomposition):如果A→→BC,則A→→B C ,A→→B - C且A→→C - B。 • 複製規則(Replication或稱為升級Promotion):如果A→B,則 A→→B。 • 合併規則(Coalescence):如果A→→B且C→D,D是B的子集合,C 與B的交集是空集合,則A→D。 • 偽裝遞移規則(Pseudotransitivity):如果A→→B且CB→→D,則 CA→→D - CB。 • 混合偽裝遞移規則(Mixed Pseudotransitivity):如果A→→B且 AB→→C,則A→→C - B。

(57)

5-4-2 第四階正規化型式 – 4NF(定義)

第四階正規化的目的是刪除多重值相依,當關聯

表符合BCNF後,如果關聯表擁有多重值相依,就

需要進行第四階正規化,其定義如下所示:

定義5.7:關聯表R符合第四階正規化型式(Fourth

Normal Form;4NF)是指關聯表符合BCNF,而且

所有多重值相依(Multi-valued Dependency)都是

功能相依(Functional Dependency),也就是刪除

多重值相依。

簡單的說,上述定義是指關聯表沒有存在的多重

值相依,只有功能相依。

(58)

5-4-2 第四階正規化型式 – 4NF(正規化)

CIT關聯表擁有2個多重值相依,如下所示:

course→→textbook

course→→instructor

執行第四階正規化,只需將多重值相依A→→B兩

邊的屬性獨立成關聯表即可,如下圖所示:

(59)

5-5 合併相依與第五階正規化型式

5-5-1 合併相依(Join Dependency)

5-5-2 第五階正規化型式 – 5NF

(60)

5-5 合併相依與第五階正規化型式

第五階正規化型式的基礎則是擴充多重值相依的

「合併相依」(Join Dependency)。

前四階正規化主要是將關聯表每一種相依,分割

成「兩」個關聯表來滿足各階的正規化型式,但

是,一些非常特殊的關聯表,如果只分割成兩個

並不能解決資料重複和異常操作問題。此時,我

們需要使用第五階正規化型式,將關聯表分割成

三個或以上的關聯表。

(61)

5-5-1 合併相依 – 說明與範例

 合併相依(Join Dependency)是將三個循環擁有關聯性的 屬性置於同一個關聯表。例如:每一個科系(department )開多門課;課程(course)可以給多位學生修;學生( student)可以修不同科系的課。三個屬性循環擁有關聯性 ,而且儲存在同一個關聯表Department_Course_Student, 簡稱DCS,如下圖所示:

(62)

5-5-1 合併相依 – 投影分割

將DCS關聯表使用投影運算(投影運算是取出部分

關聯表的屬性,即關聯表屬性集合的子集合,詳

見第16-2-2節的說明)分割成三個關聯表:DC

(department, course)、CS (course, student)、SD

(student, department),如下圖所示:

(63)

5-5-1 合併相依 – 自然合併

先執行DC和

CS的自然合併

,接著再與

SD進行自然

合併,就恢復

成原始關聯表

DCS,如右圖

所示:

(64)

合併相依是多重值相依的推廣定義,其定義如下

所示:

定義5.8:合併相依(Join Dependency)以關聯表R

為例,若關聯表R等於自然合併運算R1 R2, …

Rn,Ri是關聯表R屬性的子集合,則,關聯表R滿

足合併相依(R1, R2, …, Rn)。

以上述定義來檢視關聯表DCS,關聯表DCS可以使

用投影運算分割成DC、CS和SD三個關聯表,執行

DC CS SD自然合併運算就可以還原成原始DCS關

聯表,所以關聯表DCS擁有合併相依。

5-5-1 合併相依 – 定義

(65)

5-5-1 合併相依 – 異常狀況

 關聯表如果擁有合併相依,在新增和刪除時就會產生異常 情況,例如:DCS關聯表擁有合併相依,我們準備以新增 異常為例來說明合併相依產生的異常情況。在DCS關聯表 新增一筆值組{資管系, 101, 江小魚},如下圖所示: 將上述關聯表以投影運算分割成DC、CS和SD三個關聯表, 再將它使用合併運算結合起來,可以發現多了一筆值組

(66)

5-5-2 第五階正規化型式 – 5NF(定義)

 第五階正規化是在處理合併相依的問題,當關聯表符合 4NF後,如果關聯表擁有合併相依,就需要進行第五階正 規化,其定義如下所示:

定義5.9:關聯表R符合第五階正規化型式(Fifth Normal Form ;5NF),也稱為投影-合併正規化型式(Project-Join Normal Form;PJNF),這是指關聯表符合4NF,且所有合 併相依(R1, R2, …, Rn)的關聯表屬性子集Ri,都是關聯表R的 超鍵(Superkey),也就是刪除合併相依。  上述定義是指關聯表沒有存在合併相依。以上一節的DCS 關聯表為例,DCS關聯表擁有合併相依,所以不符合5NF。

(67)

5-5-2 第五階正規化型式 – 5NF(正規化)

DCS關聯表擁有合併相依,可以使用投影運算進行

再次分割,並不符合5NF,所以需要執行第五階正

規化,使用投影運算分割成三個關聯表,如下圖

所示:

(68)

參考文獻

相關文件

有關取得 FV/PL 的交易成本,雖然 IFRS 9 並未規定其會計處理 ,惟依證交所網站所揭示的.. 「

3.表 2 請填寫公職人員及關係人之基本資料,並勾選填寫關係人與公職人員間屬第 3 條第 1

未訂定外國人 於不同樓層或 區域移動,及 住宿於不同樓 層或區域之外 國人,不得同 時使用公共區 域之設施設備 或一起用餐之 管理規則;非 屬緊急避難或

第五條之一附表修正草案對照表 修正規定現行規定說明 附表 評點項目內容及等級點數 學歷博士學位三十 碩士學位 二十 學士學位 十 副學士學位

其他光學儀器及設備製造業 從事 2771 細類以外光學儀器及設 備製造之行業,如望遠鏡、顯微

(續下頁).. 報名資料若需修改(限於考生報名後更名、變更通訊方式及聯絡電話使用),期間若有

缺課第一至六天(如家長沒有與校方聯絡),由校方

理解並欣賞幾何的性質可以透過坐標而轉化成數與式的 關係,而數與式的代數操作也可以透過坐標產生對應的