530 likes | 774 Views
第四章 合併理論 資料庫系統理論與實務 [ 邏輯思維系列 ]. 本章 在 架構中的位置. My SQL Server 2005 理論與實作 ( 二 )(13). MS SQL Server 2005 理論與實作 ( 一 ) (08). 回復技術 (11). 結構化查詢語言 SQL( 一 )(06). 結構化查詢語言 SQL( 二 )(07). 資料庫安全 與管理 (12). 關聯式代數 (05). 並行控制 (10). 關聯式模型 (03) ( 正規化 ). 合併理論 (04). 交易處理 (09). 資料模型 (02). 資料庫系統簡介 (01).
E N D
第四章 合併理論資料庫系統理論與實務[邏輯思維系列]
本章在架構中的位置 My SQL Server 2005理論與實作(二)(13) MS SQL Server 2005理論與實作(一) (08) 回復技術(11) 結構化查詢語言SQL(一)(06) 結構化查詢語言SQL(二)(07) 資料庫安全 與管理(12) 關聯式代數(05) 並行控制(10) 關聯式模型(03)(正規化) 合併理論(04) 交易處理(09) 資料模型(02) 資料庫系統簡介(01) 邏輯與思維 2 /51
本章內容 • 4-1簡介 • 4-2卡氏積 • 4-3內部合併 • 4-4外部合併 • 4-5合併之間的比較 • 4-6不同的合併對應關係 • 4-7自我合併 3 /51
4-1簡介 • 『分分、合合』 • 分:依據Codd博士所提出的正規化 • 合:合併理論 • 正規化的目的 • 去除關聯異動的異常現象 • 合併的目的 • 透過『合併』(Join)過程得到一個虛擬關聯來達到查詢上的方便 4 /51
本章內容 • 4-1簡介 • 4-2卡氏積 • 4-3內部合併 • 4-4外部合併 • 4-5合併之間的比較 • 4-6不同的合併對應關係 • 4-7自我合併 5 /51
4-2卡氏積 • 『卡氏積』 (Cartesian Product) • 也稱之為『交叉乘積』 (Cross Product) • 或稱為『交叉合併』 (Cross Join) 6 /51
卡式積的表示方式 • 關聯R有m個屬性的集合(A1, A2, …, Am) 關聯S有n個屬性的集合(B1, B2, …, Bn) • 可以分別表示成 • R(A1, A2, …, Am) • S(B1, B2, …, Bn) • 卡氏積的操作中,兩個關聯R與S的乘積會 • 以『×』的符號來表示 • R(A1、A2、…、Am) ×S(B1、B2、…、Bn) • 簡寫成R × S 7 /51
關聯中的『值組』(Tuple) • 關聯R中的值組(tuple)表示成 • t(R) • t(A1, A2, …, Am) • 關聯S中的值組(tuple)表示成 • t(S) • t(B1, B2, …, Bn) 8 /51
卡式積範例(一) • 倘若有兩個關聯,分別為R與St(R)={t1(R), t2(R)} 且t(S)={t1(S), t2(S), t3(S)} • 則R×S={ ( t1(R), t1(S) ), ( t1(R), t2(S) ),( t1(R), t3(S) ), ( t2(R), t1(S) ), ( t2(R), t2(S) ), ( t2(R), t3(S) ) } • 示意圖如下一頁 9 /51
t1(R) t1(S) 關聯R 關聯S t1(R) t2(S) t1(S) t1(R) t1(R) t3(S) t2(S) t2(R) t2(R) t1(S) t3(S) t2(R) t2(S) t2(R) t3(S) 關聯R的屬性 關聯S的屬性 卡式積的示意圖範例(一) × = 圖4-1 關聯R與S的卡氏積 10 /51
卡式積範例(二) • 倘若有兩個關聯,分別為R與S t(R)={t1(R), t2(R), …, ti(R)} 且t(S)={t1(S), t2(S), ..., tj(S)} • 則R×S=R(A1, A2, …, Am)×S(B1, B2, …, Bn) ={ ( t1(R), t1(S) ), ( t1(R), t2(S) ),…,( t1(R), tj(S) ), …… ( ti(R), t1(S) ), ( ti(R), t2(S) ),…, ( ti(R), tj(S) ) } • 示意圖如下一頁 續下頁 11 /51
m個屬性 n個屬性 m+n 個屬性 t1(B1,B2,…,Bn) t1(A1,A2,…,Am) t1(A1,A2,…,Am) t1(B1,B2,…,Bn) t2(B1,B2,…,Bn) t2(A1,A2,…,Am) t1(A1,A2,…,Am) t2(B1,B2,…,Bn) i j t3(B1,B2,…,Bn) 筆值組 ……. 筆值組 i× j ……. t1(A1,A2,…,Am) tj(B1,B2,…,Bn) 筆值組 ti(A1,A2,…,Am) t2(A1,A2,…,Am) t1(B1,B2,…,Bn) tj(B1,B2,…,Bn) ti(A1,A2,…,Am) tj(B1,B2,…,Bn) 關聯R的屬性 關聯S的屬性 卡式積的示意圖範例(二) … × = … 圖4-2 關聯R與S的卡氏積和屬性關係 12 /51
卡式積的實際範例 • 關聯 • 員工(員工代號, 姓名, 部門, 職稱) • 客戶(負責人代號, 客戶代號, 地區代號) • 員工×客戶 • 員工(員工代號, 姓名, 部門, 職稱) × 客戶(負責人代號, 客戶代號, 地區代號) = (員工代號, 姓名, 部門, 職稱, 負責人代號, 客戶代號, 地區代號) 13 /51
關聯『員工』與『客戶』的值組 (a)關聯『員工』 (b)關聯『客戶』 圖4-3 (a) 合併原理之範例關聯 14 /51
同1筆﹃員工﹄對應4筆不同﹃客戶﹄ 關聯『員工』的屬性 關聯『客戶』的屬性 員工×客戶的結果 圖4-3 (b) 卡氏積的結果 15 /51
本章內容 • 4-1簡介 • 4-2卡氏積 • 4-3內部合併 • 4-4外部合併 • 4-5合併之間的比較 • 4-6不同的合併對應關係 • 4-7自我合併 16 /51
4-3內部合併 (Inner Join) • 亦稱為『條件式合併』(Condition Join) • 兩關聯之間的『條件限制』或稱為『對應』(Mapping)關係 • 『內部合併』講究的是兩個關聯之間 • 必須有相對應的屬性 • 彼此做一對應關係或比較關係 • 『比較關係』 (Comparison Relationship) • 包括 =、!=、>、>=、<、<= 17 /51
關聯B的屬性 關聯A的屬性 合併後 關聯A和B相等的屬性 內部合併(概念說明圖) 關聯A 關聯B (a)合併前的示意圖 (b)合併後的示意圖 圖4-4 內部合併(Inner Join) 18 /51
1筆對應2筆 內部合併( Inner Join )後 關聯『員工』的屬性 關聯『客戶』的屬性 內部合併(具體說明圖) (a)關聯『員工』 (b)關聯『客戶』 圖4-5 內部合併(Inner Join)範例 19 /51
InnerJoin 關聯『員工』的屬性 關聯『客戶』的屬性 內部合併包含於卡式積內 圖4-6 (a) 值組的包含關係 20 /51
卡式積/ 交叉乘積/ 交叉合併(Cartesian Product / Cross Product / Cross Join) 內部合併/ 條件式合併( Inner Join / Condition Join) 圖4-6 (b) 包含的示意關係圖 21 /51
內部合併後(圖4-5)消失的值組 • 關聯『員工』 • { ( 0001, 陳明明, 業務部, 經理) , ( 0004, 趙子龍, 業務部, 專員) } • 關聯『客戶』 • { ( 00005, C0025, D) } • 為何消失不見? • 彼此對應不到 • 合理嗎? • 視需求而定 22 /51
本章內容 • 4-1簡介 • 4-2卡氏積 • 4-3內部合併 • 4-4外部合併 • 4-5合併之間的比較 • 4-6不同的合併對應關係 • 4-7自我合併 23 /51
4-4 外部合併(Outer Join) • 外部合併(Outer Join)主要可分為三種 • 左邊外部合併 (Left Outer Join) • 右邊外部合併 (Right Outer Join) • 完全外部合併 (Full Outer Join) 24 /51
左邊外部合併(Left Outer Join) • 以左邊的關聯為主要關聯 • 合併後的值組 • 包括兩者關聯彼此能互相對應的值組 • 包括左邊關聯未能對應到右邊關聯的其他值組 • 對應不到右邊關聯的值組,會在右邊關聯中的屬性填入空值(Null Value) 25 /51
Null Value 關聯A 關聯A 關聯B 合併後 關聯B (a)合併前的示意圖 (b)合併後的示意圖 左邊外部合併(概念說明圖) 圖4-7 左邊外部合併 26 /51
Null Value 左邊外部合併( Left Outer Join )後 Inner Join 關聯『員工』的屬性 關聯『客戶』的屬性 左邊外部合併(具體說明圖) (a)關聯『員工』 (b)關聯『客戶』 圖4-8 左邊外部合併範例 27 /51
右邊外部合併(Right Outer Join) • 以右邊的關聯為主要關聯 • 合併後的值組 • 包括兩者關聯彼此能互相對應的值組 • 包括右邊關聯未能對應到左邊關聯的其他值組 • 對應不到左邊關聯的值組,會在左邊關聯中的屬性填入空值(Null Value) 28 /51
關聯A 關聯A Null Value 關聯B 關聯B 合併後 (a)合併前的示意圖 (b)合併後的示意圖 右邊外部合併(概念說明圖) 圖4-9 右邊外部合併 29 /51
Null Value 右邊外部合併( Right Outer Join )後 Inner Join 關聯『員工』的屬性 關聯『客戶』的屬性 右邊外部合併(具體說明圖) (a)關聯『員工』 (b)關聯『客戶』 圖4-10右邊外部合併範例 30 /51
三種合併範例之語意說明 • 內部合併 • 『列出有負責客戶的員工及所負責客戶之資料』 • 左邊外部合併 • 『列出所有員工以及所負責客戶的全部資料』 • 右邊外部合併 • 『列出所有客戶,以及所負責的員工資料』 31 /51
Null Value 關聯A 關聯A Null Value 關聯B 關聯B 合併後 (a)合併前的示意圖 (b)合併後的示意圖 完全外部合併(概念說明圖) 圖4-11 完全外部合併 32 /51
Null Value Null Value 完全外部合併(Full Outer Join )後 Left Join Inner Join Right Join 關聯『員工』的屬性 關聯『客戶』的屬性 完全外部合併(具體說明圖) (a)關聯『員工』 (b)關聯『客戶』 圖4-12 完全外部合併範例 33 /51
完全外部合併( Full Join ) 左邊外部合併( Left Outer Join ) 右邊外部合併( Right Outer Join ) 內部合併與外部合併 內部合併( Inner Join ) 圖4-13 內部合併與外部合併 34 /51
本章內容 • 4-1簡介 • 4-2卡氏積 • 4-3內部合併 • 4-4外部合併 • 4-5合併之間的比較 • 4-6不同的合併對應關係 • 4-7自我合併 35 /51
Full Outer Join Cross Join (d) (c) (b) (a) Left Outer Join Right Outer Join Inner Join 4-5 合併之間的比較 圖4-14 所有合併之間的包含關係 36 /51
各部份說明(一) • ( a ) • 『內部合併』(Inner Join)。 • ( b ) • :左邊關聯中的某些(一個或多個)屬性值,無法對應到右邊相對應的屬性值的值組。 • ( c ) • 右邊關聯中的某些(一個或多個)屬性值,無法對應到左邊相對應的屬性值的值組。 • ( d ) • 左、右兩邊關聯的某些(一個或多個)相對應的屬性值彼此無法『對應』 (Mapping)的部份,但是在合併後的左、右兩邊屬性皆會有值存在。 37 /51
各部份說明(二) • ( a ) + ( b ) • 『左邊外部合併』 (Left Outer Join)。 • ( a ) + ( c ) • 『右邊外部合併』 (Right Outer Join)。 • ( a ) + ( b ) + ( c ) • 『完全外部合併』 (Full Outer Join) • ( a ) + ( d ) • 『卡氏積』 (Cartesian Product)。 38 /51
本章內容 • 4-1簡介 • 4-2卡氏積 • 4-3內部合併 • 4-4外部合併 • 4-5合併之間的比較 • 4-6不同的合併對應關係 • 4-7自我合併 39 /51
4-6 不同的合併對應關係 • 『對應關係』並非只有『等於』的一種對應關係 • 其他『比較運算子』亦有其使用時機和必要 • 大於、小於、大於或等於、小於或等於、不等於 40 /51
非『相等』的『對應關係』範例 • 例如有兩個關聯,其一為『訂單』,此訂單中僅會有一筆產品資料,對應到另一關聯為『產品』 • 倘若要找到『訂單』關聯中的產品銷售之單價小於『產品』關聯中訂價之值組,此時的兩個關聯的對應關係則為 • 『訂單』關聯中的產品編號『等於』 『產品』關聯中的產品編號 • 『訂單』關聯中的單價『小於』『產品』關聯中的訂價 41 /51
單價 < 訂價(小於關係) 訂單.產品編號 = 產品.產品編號(相等關係) 『訂單』與『產品』關聯 『訂單』 圖4-15 訂單與產品 『產品』 42 /51
內部合併後 圖4-16 『小於』的關係 43 /51
本章內容 • 4-1簡介 • 4-2卡氏積 • 4-3內部合併 • 4-4外部合併 • 4-5合併之間的比較 • 4-6不同的合併對應關係 • 4-7自我合併 44 /51
4-7 自我合併 • 只會有一個實際的關聯存在 • 在合併時卻會將此一關聯當成兩個不同的關聯(以所扮演的角色來區分)來看待 45 /51
兩個不同關聯的查詢(分解動作) (a)關聯『員工』 (b)關聯『客戶』 圖4-17 內部合併的過程 續下頁 46 /51
員工 客戶 員工代號 負責人代號 姓名 客戶代號 部門 地區代號 職稱 47 /51
單一個關聯的查詢(分解動作) 續下頁 圖4-18 自我合併的查詢過程 48 /51
員工 員工(上司) 員工編號 員工編號 姓名 姓名 職稱 職稱 報告人 報告人 角色扮演 49 /51
員工 上司 自我合併+內部合併 圖4-19 (a) 自我合併的內部合併 50 /51