• 沒有找到結果。

o 關聯式資料庫

N/A
N/A
Protected

Academic year: 2021

Share "o 關聯式資料庫 "

Copied!
60
0
0

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

全文

(1)

第七章 關聯式資料庫設 計

許明宗

(2)

大綱

o 建立關聯式資料庫的步驟

o 關聯式資料庫

o 正規化

o 分割資料表

o 資料表的關聯

o 資料表分割精靈

(3)

建立關聯式資料庫的步驟

系統規格/需求定義

概念設計

邏輯設計

實體建置

資料庫

資料關聯性(實體-關係)模型

實體資料型態定義 需求及資料的搜集

轉換為資料表及正規化

1

3

2 4

5 6

(4)

以實際的資料來建置資料庫

c 依據搜集到的資料以及使用需求,建立資料表

d 將資料輸入資料表中,檢查資料表的欄位、資 料類型等設計是否能夠滿足實際上的使用需求

e 分析資料表的內容,執行正規化

f 分析正規化後資料表之間的關聯性

g 建立正規化後的所有資料表

h 檢查是否滿足資料特性以及使用需求

(5)

資料來源與類型

† 資料庫的資料來源

„

因應組織未來發展所需要收集、整理的資料

† 需求訪談、資料庫規劃

„

目前實際應用的資料或是資料庫

† 報表(單據)、現有的 Excel 的工作表、或是其它的資料庫

„

調查、實驗所得到的資料

† 分析、瞭解資料的結構、類型

„

資料是由那些欄位(特性)所組成

„

欄位的特性(資料類型)

(6)

關聯式資料庫

† 為何要使用關聯式資料庫

„ 分割資料表的缺點

† 關聯式資料庫

† 鍵(Key)

† 索引(Index)

† 資料完整性

(7)

未分割的資料表

50 10

$500

$300

李華山 開發史

大學路15號 大鳥書局

95/3/2 002

趙得勝 15

$250 北游記

民生路6號 北大書城

95/2/27 001

趙得勝 20

$500 開發史

民生路6號 北大書城

95/2/27 001

20

$300

數量 訂價

李華山 台北雜誌

大學路15號 大鳥書局

95/3/2 002

趙得勝 台北雜誌

民生路6號 北大書城

95/2/27 001

業務 代表 書籍

連絡地址 名稱 訂書 客戶名稱

日期 訂單

編號

訂單及客戶 資料會重複

業務員資料 書籍資料會 會重複

重複

(8)

未分割的資料表 - 缺點

† 浪費儲存空間

„ 部份資料被重複記錄,浪費儲存空間

† 增加資料輸入錯誤的可能性

„ 因為不同的時間輸入相同的資料,可能產生輸 入錯誤(北大書城 Æ北大書局)

† 資料的修改不方便

„ 當要修改資料時(台北雜誌 Æ 臺北雜誌),

需要逐筆記錄去尋找、修改

(9)

關聯式資料庫

† 基於關聯式資料模型(Relational Data Model)理 論,所設計的資料庫

† 其中資料表是由「資料行」(Column)和「資料 列」(Row)所組成

„

資料行

† 又稱為欄位(Field) 、屬性(Attribute)

† 同一個欄位裡的資料都具有相同的特性以及資料類型

† 可用來做為分類以及識別

„

資料列

† 又稱為記錄(Record)

† 一筆記錄代表一個完整的資料個體,由一個以上的欄位組成

(10)

關聯式資料庫 (cont’d)

從使用者的角度來看

† 資料表中資料的「關聯」

„

一筆記錄代表一個資料個體

„

一個欄位代表不同個體間具有的相同特性

„

透過列和欄的關聯,可以找到資料個體的某個特性

† 資料表之間的「關聯」

„

不同的資料表可能本身就有密不可分的關係

† 訂貨資料表有業務人員和員工資料表產生關聯

„

為避免未分割資料的問題,會將資料表分割為許多不 同的資料表(正規化);這些分割出來的資料表之 間,也存在著「關聯」

(11)

資料表中資料的關聯

50 10

$500

$300 開發史

大學路15號 大鳥書局

95/3/2 002

15

$250 北游記

民生路6號 北大書城

95/2/27 001

20

$500 開發史

民生路6號 北大書城

95/2/27 001

20

$300

數量 訂價

台北雜誌 大學路15號

大鳥書局 95/3/2

002

台北雜誌 民生路6號

北大書城 95/2/27

001

書籍 連絡地址 名稱

訂書 客戶名稱 日期

訂單 編號

一筆記錄代 表一個資料 個體

一個欄位代 表不同個體 間具有的相 同特性

透過列和欄

的關聯,可

以找到資料

個體的特性

(12)

資料表之間的關聯

(13)

鍵(Key)

† 關聯式資料庫由「鍵」來識別資料,而且資料表間也是 由「鍵」來建立彼此的關聯

† 候選鍵(Candidate Key):具有唯一性、最簡性的欄位 或欄位組合

„ 唯一性( uniqueness ):在候選鍵的欄位中,不會有重複的資料

„ 最簡性(irreducibility):由多個欄位組成的候選鍵,當中的任 何欄位組合,都不具有唯一性

† 資料表中的一個(一組)候選鍵,被用來做為識別記錄 的唯一性,稱為主索引鍵或主鍵(Primary Key)

„ 其他沒被選上的候選鍵,則稱為「替代鍵(Alternate Key )」

† 外來鍵(Foreign Key)

„ 資料表的欄位資料是來自於其它資料表的某一個欄位資料,則稱 該欄位為「外來鍵」

(14)

主索引鍵

† 主索引鍵是用來辨識記錄的欄位

„ 具有唯一性(不允許重複)

„ 當資料表中沒有一個欄位具有唯一性時,可以 利用多個欄位組合起來做為主索引鍵

具有唯一值的

「員工編號」可 做為主索引鍵

「姓名」可能會有 同名同姓,不適合 做為主索引鍵

「科目」加上「學 號」具有唯一值,

可做為主索引鍵

(15)

繼安 S2

大熊 S1

廠商名稱 廠商編號

供應商

P2 麵包 P1 牛奶

產品名稱 產品編號

產品種類

45 P2

S2

25 P1

S2

30 P2

S1

25 P1

S1

售價 產品名稱

廠商編號

產品售價表 主索

引鍵

外來鍵

外來鍵(Foreign Key)

† 可用來建立起欄位間的「參照」關係

† 被參照欄位通常是該資料表的主索引鍵

† 查詢多個資料表的資料時,通常是透過外來鍵來聯結資 料表

„ 需要對外來鍵建立索引,加快查詢速度

(16)

索引( Index )

† 為了加快存取資料的速度

„

適當的索引可以縮短存取資料表的時間

„

資料量越大,索引的效益越明顯

„

不當的索引會增加新增、修改、刪除資料時所須的時 間,因為這些異動也須要一併更新索引

† 需要建立索引的欄位

„

主索引鍵、外來鍵、以及其它需要經常作為查詢使用 的欄位

† 常用的索引技術有

„

B樹索引 (B-tree Index)

„

雙向連結串列 (Doubly-Linked List)

(17)

資料完整性(Data Integrity )

† 保持資料的完整性(正確、可靠、一致)

是一件重要的事

† 特別是經過分割後的資料表,資料會被分 散到不同的資料表中;必須確保分散到各 個資料表中的資料仍保持完整性

„ 例如,在某一個資料表中更新了一筆資料,則

所有用到此資料的地方也都要更新

(18)

資料完整性的種類

† 個體完整性(Entity Integrity)為確保資料 表記錄的唯一性(作用於單一資料表)

„ 主索引鍵可以達到個體完整性

„ 不可重複的索引欄位也可以達到個體完整性

† 區域完整性(Domain Integrity)為確保資 料在允許範圍內(作用於單一資料表)

„ 限制欄位的值必須在某一限制範圍內或限制欄 位的值必須受某些條件之約束

„ 利用驗證規則與文字可以達到區域完整性

(19)

資料完整性的種類 (cont’d)

† 參考完整性( Referential Integrity)為確保兩個 資料表間的資料一致;避免改變某一資料表的記 錄,造成另一資料表的內容失效

„

藉由主索引鍵和外來鍵的關係,可規範兩資料表間資 料的完整性

† 使用者定義的完整性( User-defined Integrity)為 依據使用者的實際需求或商業邏輯來規範資料的 完整性(作用於一個或一個以上的資料表)

„

設定欄位之間的關係(資料表的驗證規則)可以達到 使用者定義的完整性

„

或是透過條件約束、預存程序、觸發程序達成

(20)

參考完整性

變成無效 的記錄 S2 繼安

S3 競香 S1 大熊

廠商 名稱 廠商

編號

供應商

P2 麵包

果汁 P3

P1 牛奶

產品 名稱 產品

編號

產品種類

25 P2

S3

20 P1

S3

45 P3

S2

25 P1

S2

50 P3

S1

30 P2

S1

25 P1

S1

售價 產品

名稱 廠商

編號

產品售價表

繼安 S2

大熊 S1

廠商 名稱 廠商

編號

供應商

麵包 P2

果汁 P3

牛奶 P1

產品 名稱 產品

編號

產品種類

25 P2

S3

20 P1

S3

45 P3

S2

25 P1

S2

50 P3

S1

30 P2

S1

25 P1

S1

售價 產品

名稱 廠商

編號

產品售價表

刪除這

筆記錄

(21)

正規化(Normalization)

† 欄位相依

† 正規化

† 第一階正規化

† 第二階正規化

† 第三階正規化

(22)

欄位相依

† 在一個資料表中,若是 A 欄位的值必須依 據 B 欄位才有意義,則稱:A 欄位相依於 B 欄位

姓名等欄位相依

於員工編號欄位 成績欄位相依於科

目及學號兩個欄位

(23)

欄位相依 (cont’d)

10

$300

趙得勝 20

$500 開發史

民生路6號 北大書城

95/2/27 001

20

$300

數量 訂價

李華山 台北雜誌

大學路15號 大鳥書局

95/3/2 002

趙得勝 台北雜誌

民生路6號 北大書城

95/2/27 001

業務 代表

書籍

連絡地址

名稱

訂書 客戶名稱

日期

訂單

編號

訂單編號 書籍名稱 訂書日期

訂價 數量 業務代表

客戶名稱

客戶地址

(24)

正規化

† 在設計資料庫時,為了降低資料的重覆性以及避 免「更新異常」等狀況;所進行分割資料表的動 作,就稱為正規化

„

避免資料重複或是產生相互矛盾的情形(插入、刪 除、更改異常)

„

讓資料庫能夠在使用上更有效率、更容易進行維護

† 正規化共可分為 1NF(Normal Form)、2NF、

3NF、BCNF(Boyce-Codd Normal Form)、

4NF、5NF 等階段

† 主要以欄位相依性,做為分割資料表的依據

(25)

正規化 (cont’d)

消除遞移相關性 1、資料表為 2NF

2、欄位不具有遞移相關性 第三階正規化

消除和主索引鍵只有部份 功能相依的欄位

1、資料表為 1NF

2、欄位都完全相依於主索 引鍵

第二階正規化

1、去除性質相同的欄位 2、將有多個值的欄位分 成多筆記錄

3 、建立主索引鍵 1、欄位只存放單一資料值

2、沒有重複出現的欄位 3、欄位都和主索引鍵相依 第一階正規化

操作方式 定義及條件

正規化型式

(26)

正規化 (cont’d)

未經正規化的關聯表

第一正規化型式

第二正規化型式

第三正規化型式

除去重複群

除去部份相依

除去遞移相依

(27)

第一階正規化(1NF)

† 資料表符合下面的條件,則稱該資料表符 合第一階正規化的形式(First Normal

Form,1NF)

„ 每個欄位中都只能存放單一值

„ 沒有重複出現(意義相同)的欄位

„ 所有的欄位都相依於主索引鍵

† 不符合 1NF 資料表的缺點

„ 欄位的大小無法確定

„ 降低查詢資料的效率

(28)

不符合 1NF 的資料表

台北雜誌

$300 10本 李華山 開發史 $500 50本 三峽鎮大

學路15號 大鳥書局

95/3/2 002

趙得勝 台北雜誌 $300 20本

北游記 $250 15本 開發史 $500 20本 北市民生

北大書城 東路6號 95/2/27

001

業務 書籍資料 代表

連絡地址 訂書 客戶名稱

日期 訂單

編號

同一個欄位中有多個值,

欄位的大小無法確定,不

容易找到要的資料

(29)

不符合 1NF 的資料表 (cont’d)

$500

$250 訂價2

開發 50

$300 10 天下

雜誌 三峽鎮大

學路15號 大鳥

002 書局

東游

15

20 天下 $300

雜誌 北市民生

東路6號 北大

001 書城

數量2 書籍2

數量1 訂價1

連絡 書籍1 地址 客戶

名稱 訂單

編號

書籍、訂價和數量各

用一個欄位代表即可

(30)

建構 1NF 資料表的方法

† 將具有相同特性的欄位合併

† 重複的資料項分別儲存到不同的記錄中

† 將資料表加上適當的主索引鍵

(31)

符合 1NF 的資料表

50 10

$500

$300

李華山 開發史

大學路15號 大鳥書局

95/3/2 002

趙得勝 15

$250 北游記

民生路6號 北大書城

95/2/27 001

趙得勝 20

$500 開發史

民生路6號 北大書城

95/2/27 001

20

$300

數量 訂價

李華山 台北雜誌

大學路15號 大鳥書局

95/3/2 002

趙得勝 台北雜誌

民生路6號 北大書城

95/2/27 001

業務 代表

書籍

連絡地址

名稱

訂書 客戶名稱

日期

訂單

編號

以訂單編號和書籍編號 為主索引鍵

資料重複:訂書日期、客戶名稱、連絡地址等資料

更改異常:北大書城改為大學書城,需同時更改多筆記錄 插入異常:新書除非有人訂購,否則無法將資料輸入

刪除異常:當只有北大書城訂購北游記時;北大不訂時北游記資 料會被刪除

(32)

第二階正規化(2NF)

† 只有第一階正規化資料表的缺點

„ 浪費儲存的空間

„ 容易造成更新、新增、刪除資料時產生異常

† 若資料表符合以下的條件,則稱該資料表 符合第二階正規化的形式(Second Normal Form,2NF)

„ 符合 1NF 的格式

„ 各欄位與主索引鍵間沒有部分相依的關係

(33)

部分相依

† 主索引鍵由多個欄位組成時,欄位只與主索引鍵 中的部分欄位有相依性,而與另一部分的欄位沒 有相依性

„

數量和書籍編號有相依性,和訂單編號沒有相依性

„

訂書日期、業務代表、客戶名稱和和訂單編號,和書 籍編號沒有相依性

訂單編號 書籍名稱 訂書日期

訂價 數量 業務代表

客戶名稱

客戶地址 主索引鍵

(34)

建構 2NF 資料表的方法

† 要消除資料表的部分相依問題,只需要將部份相 依的欄位分割成另外的資料表即可

臺北發展史 250

書籍名稱 訂價 台北雜誌 300

書籍資料表 95/02/27 訂書日期 業務代表

趙得勝

民生路6號

001 北大書城

連絡地址 客戶名稱

訂單號碼

訂書記錄表

北游記 台北雜誌 書籍名稱

15 001

訂單號碼 數量

20 001

訂購數量表

更改異常:地址改為民生東路17號,需同時更改多筆記錄 插入異常:新客戶除非該客戶訂購書籍,否則無法輸入資料 刪除異常:若北大書城只有一筆訂單;刪除訂單會把它的資 料刪除

(35)

第三階正規化(3NF)

† 只有第二階正規化資料表的缺點

„ 還是會有更改、新增、刪除異常

† 資料表符合以下的條件,則稱該資料表符 合第三階正規化的形式(Third Normal

Form,3NF)

„ 符合 2NF 的格式

„ 各欄位與主索引鍵間沒有遞移相依關係

(36)

遞移相依

† 遞移相依是指在二個欄位間並非直接相 依,而是借由第三個欄位來達成資料的相 依關係

„ 客戶地址和訂單編號之間有遞移相依性

訂單編號 訂書日期

業務代表 客戶名稱 客戶地址

主索引鍵

(37)

建構 3NF 資料表的方法

† 要消除資料表中的遞移相依性,和消除資 料表的部分相依性方式相同

„ 將資料表再分割成不同的資料表

95/02/27 訂書日期 業務代表

趙得勝 001 北大書城

客戶名稱 訂單號碼

訂書記錄表

民生路6號

北大書城

連絡地址 客戶名稱

客戶資料表

(38)

設計完成的資料表

95/02/27 訂書日期 業務代表

趙得勝 北大書城

001

客戶名稱 訂單號碼

訂書記錄表

民生路6號

北大書城

連絡地址 客戶名稱

客戶資料表

臺北發展史 250

書籍名稱 訂價 台北雜誌 300

書籍資料表 北游記

台北雜誌 書籍名稱

15 001

訂單號碼 數量

20 001

訂購數量表

(39)

正規化的另類思考

† 不必要的分割

„ 正規化的工作有時不必要做的太徹底,因為過 多的資料表可能會降低系統執行的效能

† 在上例中,要查詢訂單的訂購書籍和數量需透過 兩個資料表的關聯

95/02/27 200

訂書日期 數量

業務代表 趙得勝 北大書城

001 台北雜誌

客戶名稱 書籍名稱

訂單號碼

訂書記錄表

台北雜誌

書籍名稱 訂價 300 書籍資料表

大學路15號 連絡地址 客戶名稱

北大書城

客戶資料表

(40)

正規化的另類思考

† 人工的分割

„ 有時為了增加資料處理的效率,可將正規化後 的資料表再做分割

† 例如,一個資料表擁有許多的欄位,這些欄位中 又有很多欄位根本很少用到;就可將這些很少用 到的欄位分離出來,存放到另外一個資料表中

(41)

分割資料表

† 對於一般簡單的資料庫設計而言,通常只 需要執行下列的檢查,而無需透過正規化 過程

„ 找出資料表中的主索引鍵以及欄位和主索引鍵 之間的關係

„ 以欄位和主索引鍵之間的關係為基礎,分割出 可自行識別的資料表

„ 分割欄位值一再重複的欄位

„ 判斷欄位是否真的需要分割

(42)

找出主索引鍵以及欄位和主索引鍵 之間的關係

50 10

$500

$300

李華山 開發史

大學路15號 大鳥書局

95/3/2 002

趙得勝 15

$250 北游記

民生路6號 北大書城

95/2/27 001

趙得勝 20

$500 開發史

民生路6號 北大書城

95/2/27 001

20

$300

數量 訂價

李華山 台北雜誌

大學路15號 大鳥書局

95/3/2 002

趙得勝 台北雜誌

民生路6號 北大書城

95/2/27 001

業務 代表

書籍

連絡地址

名稱

訂書 客戶名稱

日期

訂單

編號

訂單編號 書籍名稱 訂書日期

訂價 數量 業務代表

客戶名稱

客戶地址 主索引鍵

(43)

分割出可個別識別的資料表

訂單編號 書籍名稱

訂書日期 業務代表 訂價 客戶名稱 客戶地址

主索引鍵

訂單編號 書籍名稱

數量

主索引鍵

主索引鍵

(44)

分割欄位值一再重複的欄位

訂單編號 訂書日期

業務代表 客戶名稱 客戶地址

主索引鍵

訂單編號 訂書日期

業務代表

客戶名稱 主索引鍵

客戶名稱 客戶地址

主索引鍵

(45)

判斷欄位是否真的需要分割

† 當資料表中欄位值非常簡單(例如,資料 類型為「是/否」的欄位),雖然欄位值會 一再的重複出現,這個時候就需要考慮是 否還要再分割資料表

訂單編號 訂書日期

業務代表

客戶名稱 主索引鍵

性別

性別欄位非常的

簡單,可以不用

再分割

(46)

資料表的關聯

† 一對多關聯

„

資料表中的外來鍵欄位(多)和參照的資料表(一)

的關聯

† 一對一關聯

„

將不常用(特殊)的欄位分割的兩個資料表的關聯

† 多對多關聯

„

書籍(可以被多個多個客戶訂購)和客戶之間的關聯

(可以訂購不同的書籍)

„

多對多關聯較不易處理,通常會轉換為兩個一對多關 聯

(47)

一對多關聯

臺北發展史 250

書籍名稱 訂價 台北雜誌 300

書籍資料表

台北雜誌 台北雜誌 書籍名稱

15 002

訂單號碼 數量

20 001

訂購數量表

(48)

一對一關聯

發展史 250

書籍名稱 訂價 台北雜誌 300

書籍資料表1

臺北發展史 450g

書籍名稱 重量 台北雜誌 500g

書籍資料表2

(49)

多對多關聯

95/02/27 200

訂書日期 數量

業務代表 趙得勝 北大書城

001 台北雜誌

客戶名稱 書籍名稱

訂單號碼

訂書記錄表

台北雜誌

書籍名稱 訂價 300 書籍資料表

大學路15號 連絡地址 客戶名稱

北大書城

客戶資料表

(50)

資料表分析精靈

† 「工具/分析/資料表」

說明重複資料 會浪費空間

說明重複資料

會造成資料的

完整有問題

(51)

資料表分析精靈 - 範例說明

參考完整性

子資料表

(52)

資料表分析精靈 - 選擇資料表

要不要顯示前 兩個說明視窗

選擇要分割

的資料表

(53)

資料表分析精靈 - 使用精靈

(54)

資料表分析精靈 - 自動分割資料表

(55)

資料表分析精靈 - 重新命名新資料表

(56)

資料表分析精靈 - 手動分割資料表

(57)

資料表分析精靈 - 分割完成的資料表

(58)

資料表分析精靈 - 設定主索引鍵

從既有的欄位中 設定主索引鍵

新增欄位成

為主索引鍵

(59)

資料表分析精靈 - 更正資料表的錯誤

(60)

資料表分析精靈 - 完成資料表分割

僅建立新分 割的資料表 建立新分割資料表,

建立一個新查詢,並

將舊資料表重新命名

為「原資料表_舊」

參考文獻

相關文件

16- 被訪旅客對購物服務的評價 17- 被訪旅客對公共交通服務的評價 18- 被訪旅客對環境衛生的評價 19- 被訪旅客對觀光點的評價. 20-

工作流程 型名搜尋 月別搜尋 判定 判定登錄品 變更部份 所有資料 客戶 清白客戶

表十四:被訪旅客對旅行社服務的評價 表十五:被訪旅客對飲食服務的評價

表十四:被訪旅客對旅行社服務的評價 表十五:被訪旅客對飲食服務的評價

表十四:被訪旅客對旅行社服務的評價 表十五:被訪旅客對飲食服務的評價

表十四:被訪旅客對旅行社服務的評價 表十五:被訪旅客對飲食服務的評價 表十六:被訪旅客對住宿服務的評價 表十七:被訪旅客對購物服務的評價

表十四:被訪旅客對旅行社服務的評價 表十五:被訪旅客對飲食服務的評價

14- 被訪旅客對飲食業服務的評價 15- 被訪旅客對酒店業服務的評價 16- 被訪旅客對購物服務的評價 17- 被訪旅客對公共交通服務的評價 18- 被訪旅客對環境衛生的評價