計算機概論 第二版 - 國立高雄應用科技大學

Download Report

Transcript 計算機概論 第二版 - 國立高雄應用科技大學

LOGO
計算機概論
第二版
Foundations of Computer Science
Chapter 14 資料庫
歐亞書局
14.1 簡介
資料儲存傳統地使用個別的、無關聯的檔案──有時稱為平坦
檔案(flat files)。
定義: 資料庫(database)是相關的、邏輯上一致的、被
一個組織中應用程式所運用的資料集合。
資料庫之優點
較少的重複
避免不一致性:如果同樣的資訊片段被存放在不只一個地方
中,那麼該資料所發生的任何改變都需要套用到資料被存放
的所有地方中。
效率
資料完整性
機密性
歐亞書局
p.346
14.2 資料庫管理系統
資料庫管理系統(database management system;DBMS) 用以
定義、產生和維護一個資料庫,它也允許了對資料庫中的資
料做管制性的存取。DBMS 有五個組成要素:硬體、軟體、
資料、使用者和程序。
圖 14.1 DBMS 組成要素
歐亞書局
p.347
硬體
硬體(hardware)是允許存取到資料的實體電腦系統。
軟體
軟體(software)是允許使用者存取、維護和更新資料的真正
程式。軟體管控了哪個使用者能夠存取資料庫中哪一部分的
資料。
資料庫
資料庫的資料是實際存放在儲存裝置中。在資料庫中,資料
是與存取它的軟體相分離的獨立實體,此分離允許組織可以
更換軟體而不必改變實際資料或其儲存的方式。
使用者
使用者(users)可區分成兩類,即終端使用者和應用程式。
歐亞書局
p.347
終端使用者
終端使用者(end users)是指能夠存取此資料庫而直接得到資
訊的人。終端使用者有兩種類型:資料庫管理者(database
administrators;DBA)和正常使用者。資料庫管理者擁有最高
的權力,可以管控其他使用者和他們對 DBMS 的存取、可以
授權某些權力給其他人,也能在任何時間解除這些權力。另
一方面,正常使用者僅能使用部分資料庫和有限制的存取。
應用程式
資料庫中另一些資料的使用者是應用程式(application
programs)。應用程式需要存取和處理資料。
程序
DBMS 最後一個構成要素是一套程序(procedures)或規則,
應該清楚地加以定義並且讓資料庫使用者遵循。
歐亞書局
p.347
14.3 架構
DBMS 有三階層架構:內部的、概念性和外部的。
圖 14.2 資料庫架構
歐亞書局
p.348
內部階層
決定資料實際儲存於儲存裝置中的地方為內部階層(internal
level),它處理低階存取方法和位元組如何轉換進出儲存裝
置。
概念性階層
概念性階層(conceptual level)定義資料的邏輯觀點。在此階
層中,定義了資料模型以及 DBMS 的主要功能。DBMS 將內
部資料觀點改變成使用者需要的外部資料觀點,概念性階層
是一個中間媒介並且可讓使用者免除處理內部階層。
外部階層
外部階層(external level)直接與使用者相互作用(終端使用
者或應用程式)。它把來自概念性階層的資料轉換成使用者
所熟悉的格式和觀點。
歐亞書局
p.348
14.4 資料庫模型
資料庫模型(database models)定義了資料的邏輯設計。有三
個模型已在使用中:階層式模型、網路模型和關聯式模型。
階層式模型
在階層式模型(hierarchical model)中,資料常被組織成為上
下顛倒的樹狀。每一個實體只有一個父但能夠有很多的子,
在階層的頂端有一個稱作樹根的實體。
圖 14.3 代表一所大學的一個階層式模型範例
歐亞書局
p.349
網路模型
在網路模型(network model)中,實體被組織成圖形,其中
有些實體可以透過幾條路徑存取。
關聯式模型
在關聯式模型(relational model)中,資料被組織成一個叫做
關聯的二維資料表。
歐亞書局
p.349
圖 14.4 代表一所大學的一個網路模型範例
歐亞書局
p.350
圖 14.5 代表一所大學的一個關聯式模型範例
歐亞書局
p.350
14.5 關聯式資料庫模型
在關聯式資料庫管理系統(relational database management
system;RDBMS)中,資料是表示成一組的關聯。
關聯
一個關聯(relation)是一個二維的資料表。RDBMS 將資料加
以組織,使得外部觀點看起來是一組關聯或資料表。
RDBMS 的關聯具有下列的特性:
名稱:在關聯式資料庫的每一個關聯應該有一個與其他關聯
不同的唯一名稱。
歐亞書局
p.350
屬性:在關聯中的每一個欄位稱為屬性(attribute)。每一個
屬性為該欄位所儲存的資料賦予意義。在資料表中的每一個
欄位都必須具有在關聯範圍內唯一的名字。一個關聯中屬性
的總數量稱為關聯度。注意,屬性名稱並沒有被存在資料庫
中;概念性階層使用屬性來替每個欄位賦予意義。
值組:在關聯中的每一列稱為值組(tuple),值組定義了一
組屬性值的集合。關聯中列的總數量稱為關聯基數
(cardinality)。注意,當值組增加或刪除時,關聯基數會改
變,這使得資料庫成為動態性的。
歐亞書局
p.351
圖 14.6 關聯之範例
歐亞書局
p.351
14.6 關聯運算
九個運算:插入、刪除、更新、選取、映射、合併、聯集、
交集和差異。
結構化查詢語言
結構化查詢語言(Structured Query Language;SQL)是一種
宣告式(而不是程序式)語言,表示使用者只需宣告想要執
行的程序而不用撰寫逐步執行的程序。
插入
插入運算(insert operation)是一元運算;它被應用於一個單
獨的關聯。這個運算把新的值組插入至關聯之中。
insert into RELATION-NAME
values (…,…,…)
value 子句定義了所有要插入相對應值組的屬性。
歐亞書局
p.351
圖 14.7 插入運算之範例
歐亞書局
p.352
刪除
刪除運算(delete operation)也是一元運算。這個運算刪除了
由關聯而來的準則,其所定義的一個值組。
delete from RELATION-NAME
where criteria
刪除的準則被定義在 where 子句之中。
歐亞書局
p.352
圖 14.8 刪除運算之範例
歐亞書局
p.353
更新
更新運算(update operation)也是一元運算;它應用於一個單
獨的關聯。此運算改變了值組的一些屬性值。
update RELATION-NAME
set attribute1 = value1, attribute2 = value2, …
where criteria
要改變的屬性被定義在 set 子句之中,而更新的準則是被定義
在 where 子句之中。
歐亞書局
p.353
圖 14.9 更新運算之範例
歐亞書局
p.353
選擇
選擇運算(select operation)是一元運算;也就是說,它應用
於一個單獨的關聯,並且產生出另一個關聯。這些所產生關
聯的值組(列)為原始關聯中值組的子集合。選擇運算使用
一些準則來選擇原始關聯中的一些值組。
select *
from RELATION-NAME
where criteria
星號(*)表示選擇所有的屬性。
歐亞書局
p.353
圖 14.10 選擇運算之範例
歐亞書局
p.354
映射
映射運算(project operation)也是一元運算,也會產生出另一
個關聯。這些所產生出來的關聯,其屬性(欄位)為原始關
聯中屬性的子集合。映射運算所產生的關聯,其值組有較少
的屬性。這個運算中值組(列)的數目會保持相同。
select attribute-list
from RELATION-NAME
新關聯的欄位名稱被清楚地列出。
歐亞書局
p.354
圖 14.11 映射運算之範例
歐亞書局
p.354
合併
合併運算(join operation)是二元運算;它取用兩個關聯並基
於其共同屬性來加以結合。
select attribute-list
from RELATION1, RELATION2
where criteria
屬性表是兩個輸入關聯的屬性之組合;準則明確地定義了用
來做為共同屬性之屬性。
歐亞書局
p.355
圖 14.12 合併運算之範例
歐亞書局
p.355
聯集
聯集運算(union operation)也是二元運算;它取用兩個關聯
來產生一個新關聯。然而,這兩個關聯是有所限制的;它們
必須具有相同的屬性。聯集運算產生一個新關聯,其中每一
個值組不是在第一個關聯或第二個關聯上,就是在兩者上。
select *
from RELATION1
union
select *
from RELATION2
歐亞書局
p.355
圖 14.13 聯集運算之範例
歐亞書局
p.356
交集
交集運算(intersection operation)也是二元運算;它取用兩個
關聯來建立一個新關聯。兩個關聯必須有相同的屬性。交集
運算產生一個新的關聯,其中每一個值組同時是兩個關聯上
的成員。
select *
from RELATION1
intersection
select *
from RELATION2
同樣地,星號表示選擇所有的屬性。
歐亞書局
p.356
圖 14.14 交集運算之範例
歐亞書局
p.357
差異
差異運算(difference operation)也是二元運算,它是應用於
具有相同屬性的兩個關聯。所產生關聯之值組是只在第一個
關聯中而不在第二關聯之中。
select *
from RELATION1
minus
select *
from RELATION2
歐亞書局
p.357
圖 14.15 差異運算之範例
歐亞書局
p.357
14.7 資料庫之設計
實體─關係模型(Entity-Relationship Model;ERM),以定義
出需要被維護之資訊的實體、這些實體的屬性與實體之間的
關係。
資料庫設計者會建立實體─關係(Entity-Relationship;E-R)
圖,來表示要被儲存之資訊的實體與那些實體間的關係。E-R
圖使用了一些幾何圖形:
1. 長方形代表實體集合
2. 橢圓型代表屬性
3. 菱形代表關係集合
4. 線條把屬性連接到實體集合,也可以把實體集合連接到關
係集合
歐亞書局
p.358
範例 14.1
圖 14.16 顯示了一個非常簡單的 E-R 圖,包含三個實體集合、它們
的屬性與實體集合間的關係。以菱形表示的關係可以是一對一、
一對多、多對一與多對多。有些屬性是著以暗色的,這些屬性是
在每個集合中被視為該集合之鍵值。
歐亞書局
p.358
圖 14.16 E-R 圖中實體、屬性與關係
歐亞書局
p.358
從 E-R 圖到關聯
針對 E-R 圖中的每個實體集合,我們會建立一個關聯(資料
表),其中有跟定義給該集合的 n 個屬性相關的 n 個欄位。
針對在 E-R 圖中的每一個關係集合,我們會建立關聯(資料
表)。這個關聯會為牽涉在這個關係中的每個實體集合之鍵
值配置一個欄位;如果關係有屬性的話(本例中沒有),也
會為關係本身每個屬性配置欄位。
歐亞書局
p.359
範例 14.2
如圖 14.17 所示,針對在圖 14.16 中定義的每一個實體集合,我們
會有三個關聯(資料表)。
圖 14.17 圖 14.16 中實體集合之關聯
歐亞書局
p.359
範例 14.3
圖 14.16 有兩個關係集合,授課與選課,每一個都被連接到兩個實
體集合。這些關係集合之關聯被加入到先前的實體集合之關聯
中,並且顯示在圖 14.18。
圖 14.18 圖 14.16 中 E-R 圖之關聯
歐亞書局
p.359
正規化
正規化(normalization)是將給定的關聯集合轉換到具有更結
實結構之新關聯集合的過程。正規化過程定義了一組階層式
正規形式(normal forms;NFs),這些正規式會形成一個階
層式結構。
第一正規式
當我們把實體或關係轉換到表格式的關聯時,會有一些關聯
在列或行的交集中出現了不只一個數值。這兩個關聯可以藉
由重複有這個問題存在的列,來加以正規化。
歐亞書局
p.360
圖 14.19 第一正規式之範例
歐亞書局
p.361
第二正規式
在每一個關聯中,我們需要有一個鍵值(稱作主要鍵值),
來讓所有其他屬性(欄位數值)有所依靠。當基於 E-R 圖之
關聯被建立時,我們可能會有一些複合鍵值(兩個或更多鍵
值的組合)。如果每一個非鍵值之屬性都依賴於整個複合鍵
值時,關聯便是第二正規式。
假如一些屬性只依賴於部分複合鍵值的話,該關聯就不是第
二正規式。
歐亞書局
p.361
圖 14.20 第二正規式之範例
歐亞書局
p.361
14.8 其他資料庫模型
另外兩個常見的模型是分散式資料庫和物件導向資料庫。
分散式資料庫
分散式資料庫(distributed database)其資料是被儲存於數部
電腦中,彼此之間透過網際網路(或一些私人廣域網路)來
溝通。每部電腦(或站)維護部分資料庫或整個資料庫。換
句話說,不是將資料分成片段並分別儲存於各站,就是將資
料複製到每一站。
片段分散式資料庫
在片段分散式資料庫(fragmented distributed database)中,資
料是局部性的。
歐亞書局
p.362
複製分散式資料庫
在複製分散式資料庫(replicated distributed database)中,每
一站都擁有另一站精確複製的資料。儲存於某一站資料所做
的修改,會確切地在每一站重複該動作,之所以有這種資料
庫的原因是為了安全因素。
物件導向資料庫
物件導向資料庫(object-oriented database)試著保有關聯式模
型的優點而且同時允許應用程式可以存取結構化的資料。在
物件導向資料庫中,定義了物件與其關聯。此外,每一個物
件能夠有可表示成欄位的屬性。
一般使用在物件導向資料庫的查詢語言是 XML(可擴充標示
語言)。
歐亞書局
p.362