認識資料庫系統

Download Report

Transcript 認識資料庫系統

Ch01 資料庫基本概念
胡念祖
資料參考:資料庫理論與實務/旗標/施威銘工作室
1
商業智慧/資料庫 架構圖
BSC
Mining
Monitor
What-If
Strategy
KPI
Dashboard
Report
Others
Business
Cube
Sales
Data Mart
Inventory
Production
Rules
ERP
Others
Scheduling
CRM
SCM
Others..
Management
Data warehouse
ETL
Database
2
資料庫系統簡介
3
資料庫系統簡介



資料庫是儲存資料的地方。
一個資料庫系統中可以有多個資料庫, 每個資料庫
都是一組經過整理好的資料集合。
一般, 我們會將資料庫想像成是一個存放資料的容
器, 但資料庫的真實型態其實是一個個的電子檔案
(file)。
4
資料庫系統簡介


資料庫管理系統則是指管理資料庫的軟體, 它們負
責使用者與資料庫之間的溝通, 如存取資料庫中的
資料、以及管理資料庫的各項事務等。
SQL Server、 Access 、Oracle、SyBase、
Informix、MySQL、PostgreSQL ... 等皆是資料庫
管理系統。
5
資料庫系統簡介


應用程式是指自行開發的使用者介面, 因為並非每
個使用者都會操作複雜的資料庫, 所以必須藉由另
外設計的程式, 來提供較簡單且人性化的操作介面
例如我們利用 Visual Basic 開發的人事管理系統、
進銷存管理系統...等。這些應用程式都必須透過資
料庫管理系統才能存取及管理資料庫內的資料。
6
資料庫系統的使用者

資料庫系統從設計、建立、操作到管理階段, 都會
有不同的使用者參與, 我們可以大致區分出四種類
型:


資料庫設計者 (Database Designer):資料庫設計
者負責整個資料庫系統的設計, 依據使用者的需求
設計適當的格式來存放資料。
資料庫管理者 (DataBase Administrator, DBA) :
資料庫建好之後, 便可以交給資料庫管理者來負責
管理及維護。
7
資料庫系統的使用者


應用程式設計者 (Application Designer) :應用程
式設計者負責撰寫存取資料庫的用戶端應用程式,
讓使用者得以透過方便的操作介面來使用資料庫。
一般使用者 (End user) :一般使用者就是真正經
常在存取資料庫的使用者, 他們只需要學會端的應
用程式, 不需要擔心資料庫的維護或管理方面的任
何問題。
8
關聯式資料庫(Relational Database)



關聯式資料庫是以 2 維的矩陣來儲存資料。
可以說是將資料儲存在表格的欄、列之中。
儲存在欄、列裡的資料必會有所 "關聯", 所以這種
儲存資料的方式才會稱為關聯式資料庫, 而儲存資
料的表格則稱為 "資料表"。
9
關聯式資料庫(Relational Database)
10
關聯式資料庫(Relational Database)

假如我們要從以上的資料表尋找 "盧拉拉" 的地址,
則是由橫向的 『盧拉拉』 與縱向的 『地址』, 交
相關聯而得來:
11
關聯式資料庫(Relational Database)


除了儲存在資料表中的行與列會有所關聯, 關聯式
資料庫裡面的資料表之間通常也會互有關聯。
這種方式的優點是可以從一個資料表中的欄位, 透
過資料表的關聯, 而找到另一個資料表中的資料。
12
關聯式資料庫(Relational Database)


目前市場上是以關聯式資料庫使用最廣泛。
Microsoft SQL Server、SyBase、Informix、
MySQL、PostgreSQL、Access...等, 都是屬於關
聯式資料庫管理系統 (Relational DBMS, RDBMS)。
13
關聯式與物件導向式資料庫的比較


關聯式資料庫必須由資料庫設計者來設計、建立、及
管理關聯。
由下圖可知, 兩個資料表是藉由客戶編號來達成關聯的,
而這個關聯性在關聯式資料庫中, 必須由設計者自行建
立才會真正產生關聯。
14
關聯式與物件導向式資料庫的比較

物件導向式資料庫中, 物件和物件之間的連繫, 是
因其屬性而必然發生的。

簡單地說, 在關聯式資料庫中資料表間的關係必須
靠設計者自行建立來產生關聯, 而物件導向式資料
庫中, 各物件之間的關係則是在物件建立之時, 便
會自行連繫起來。
15
主從式架構
16
資料庫管理系統的基本功能


資料庫管理系統其實就是管理資料庫的軟體系統,
它們要負責整個資料庫的建立、資料存取、權限設
定、資料備份、操作的監督與記錄... 等等工作。
底下再進一步說明資料庫管理系統 所應具備的基本
功能。
17
資料庫管理系統的基本功能


資料定義:
 DBMS 必須能夠充份定義並管理各種類型的資料項
目。
 例如關聯式資料庫管理系統必須具備建立資料庫、
資料表、定義各欄位的資料型別, 以及資料表之間
的關聯 ... 等等的能力才行。
資料處理:
 DBMS 必須提供使用者對資料庫的存取能力, 包括
新增、修改、查詢、與刪除等基本功能。
 有時 DBMS 提供的功能雖然完善, 但是並不是很適
合一般的使用者操作, 這時就需要程式設計師另外
再撰寫用戶端的應用程式, 以供一般使用者操作。
18
資料庫管理系統的基本功能

資料安全:
 DBMS 應該具備設定使用者帳戶、密碼、及權限的
功能, 讓每一個使用者只能存取授權範圍內的資料,
以防止機密資料外洩, 或資料庫遭受任何有意或無
意的破壞。

資料備份:
 DBMS 必須提供方便的資料備份功能, 如此在資料
庫不幸意外毀損時, 還可以還原到備份資料時的狀
況, 以減少損失。
19
認識關聯式資料庫


SQL Server 是一個關聯式資料庫, 所謂 “關聯”
(Relationship) 是指藉由表格的形式找出資料的方
法。
例如我們想從下圖查詢訂單序號 4 的訂購數量, 就
可由橫的一列 (記錄) 與縱的一行 (欄位) 的關聯而
取得:
20
認識關聯式資料庫

除了每個資料表中行與列的關聯之外, 數個資料表
之間, 也可經由各個資料表中相同的意義及資料類
型的欄位來實現 (欄位名稱不一定要相同), 例如:
21
認識關聯式資料庫
22
認識關聯式資料庫
23
認識關聯式資料庫
24
認識關聯式資料庫

關聯式資料庫的強大資料處理功能是完全來自於關
聯二字, 也就是先將一堆複雜的資料分類存放, 然
後再 "建立關聯性" 將資料連接起來, 並靈活應用。
25
認識關聯、 Primary Key (主索引鍵) 與
Foreign Key(連外鍵)


在實際分析資料表的關聯時, 一般都是用分割資料
表的方式, 先將所有需要的欄位大略歸類, 然後再
透過正規化分析將重複的資料一一挑出來, 另外產
生新的資料表, 並建立與原資料表的關聯。
關聯式資料庫的優點如下。



節省儲存空間
減少輸入錯誤
方便資料修改
26
節省儲存空間

因為資料庫中的資料常常會產生重複的情況, 如果
每一次都要輸入相同的資料, 容易浪費儲存的空間,
例如下圖的書籍資料表:

很明顯地在作者及分類欄位中, 有許多資料是重複
的, 例如作者 “威威研究室” 輸入 4 次、分類
“Windows” 及 “影像處理" 分別輸入 2 次。
27
節省儲存空間

若將作者及分類欄位抽離, 另外獨立成作者資料表
及分類資料表, 並建立這 3 個資料表之間的關聯。

那麼在作者資料表中, 相同的作者就只要建立一筆
記錄, 而分類資料表中的每一種類型也只要記錄一
次即可。
28
減少輸入錯誤

若是經常輸入同樣的資料, 難免會有漏打或打錯字
的情況發生:

若是使用關聯式資料庫, 則作者欄的資料實際是來
自作者資料表, 只要確認作者資料表中的 "威威研
究室" 這筆記錄是正確的, 就不需要重複輸入 "威威
研究室", 自然就減少輸入錯誤的機會了。
29
方便資料修改


若有一天要將 “威威研究室” 改為 “旗旗研究
室”。在沒建立關聯的資料表中, 我們必須逐項修
改每一筆記錄中的作者欄位。
若使用關聯式資料庫, 則只要將作者資料表的 "威
威研究室" 改為 "旗旗研究室", 書籍資料表中所有
關聯到作者欄位的值, 便都會改為 "旗旗研究室" 了。
30
Primary Key (主索引鍵)




資料表之間是由『鍵 (Key)』來建立彼此的關聯。
在 SQL Server 中, 我們可為資料表設定 Primary
Key 及 Foreign Key。
Primary Key 是用來辨識記錄的欄位, 具有唯一性,
且不允許重複。
例如在書籍資料表中加入書籍編號欄位, 給每一本
書一個唯一的編號, 那麼這個書籍編號欄位就可用
來當作Primary Key, 使用者即可依據此Primary
Key找到特定書籍的詳細記錄。
31
Primary Key (主索引鍵)


雖然資料表不一定要有Primary Key, 但一般都建議
最好要有。
有時資料表可能沒有一個欄位具有唯一性, 此時可
考慮使用兩個或多個欄位組合起來做為Primary
Key。
32
Primary Key (主索引鍵)

下表中將訂單編號及書籍編號這 2 個欄位組合起
來具有唯一性, 因此我們可將這 2 個欄位同時設為
Primary Key, 那麼就具有辨識唯一一筆記錄的特性
33
Foreign Key


Foreign Key 是用來連結其他資料表之用,
在關聯式資料庫中, 資料表之間的關係是藉由連外
鍵來建立的, 例如:
34
Foreign Key



書籍和作者資料表中的作者編號欄位, 前者為
Foreign Key, 後者為Primary Key。
兩個欄位的類型、寬度等屬性必須相同, 但名稱不
一定要一樣, 只是習慣上都會取相同的名稱。
一個資料表中可包含多個連外鍵, 且其資料可重複
(例如很多本書的作者可能是同一人), 這點和
Primary Key不同。
35
資料的完整性



對於關聯式資料庫來說, 還有一個重要的觀念就是
資料完整性 (Data Integrity)。
所謂資料完整性是用來確保資料庫中資料的正確性
及可靠性。
例如在某一個資料表中更新了一筆資料, 則所有用
到此資料的地方也都要更新
36
資料的完整性

資料完整性大致分為下列幾種類型:




實體完整性 (Entity Integrity)
區域完整性 (Domain Integrity)
參考完整性 (Referential Integrity)
使用者定義的完整性 (User-defined Integrity)
37
實體完整性 (Entity Integrity)

實體完整性是為了確保資料表中的記錄是 “唯一”
的。我們設定Primary Key就是為了達成實體完整
性。
38
區域完整性 (Domain Integrity)


區域完整性是為了確保資料在允許的範圍中。
例如限制某一個整數值欄位的資料範圍在 100 ~
999 之間, 若輸入的資料不在此範圍內, 即不符合
區域完整性, 會被 SQL Server 拒絕。
39
參考完整性 (Referential Integrity)

參考完整性是用來確保相關資料表間的資料一致,
避免因一個資料表的記錄改變, 而造成另一個資料
表的內容變成無效值。
40
參考完整性 (Referential Integrity)

上述範例中, 若我們在其關聯上設定了參考完整性,
當要在作者資料表中刪除一筆記錄, 則刪除的動作
會失敗, 以免書籍資料表中的資料失去連結。
41
使用者定義的完整性 (User-defined
Integrity)


顧名思義, 這是由使用者自行定義, 而又不屬於前
面三種的完整性。
例如某個客戶欠款超過 6 個月, 則下次再下訂單時
就不賣他, 這就是由使用者定義的完整性限制。
42
資料表的關聯種類

資料表間的關聯可分為3 種對應方式:



一對一
一對多
多對多
43
一對一關聯


當兩個資料表之間是一對一關聯時, 表示甲資料表
中的一筆記錄, 只能對應到乙資料表中的一筆記錄,
而乙資料表中的一筆記錄也只能對應到甲資料表中
的一筆記錄。
例如對『員工資料』來說, 我們可以將之分為 "可
公開" 與 "機密" 二類, 然後分別存放在二個資料表
中:
44
一對一關聯

這樣一來, 在平時只需要用到 "可公開" 的資料, 若
有特殊需要時, 例如計算這個月的薪資, 那麼就可
以利用一對一關聯, 由這二個資料表中找出員工的
完整資料了。
45
一對多關聯

這是最常見的一種關聯, 當兩個資料表之間是一對
多關聯時, 表示甲資料表中的一筆記錄可對應到乙
資料表中的多筆記錄;而乙資料表中的一筆記錄只
能對應甲資料表中的一筆記錄。
46
一對多關聯


在客戶資料表中每個客戶都只有一筆記錄, 但可以
對應到訂單資料表中的多筆記錄, 這便是一對多的
關聯。
利用這種關聯, 我們可以得到以下的好處:


從客戶資料中, 可找出任一個客戶的所有訂單資料。
從訂單資料中, 可找出該訂單所屬客戶的相關資料。
47
多對多關聯


當兩個資料表之間是多對多關聯時, 表示甲資料表
的一筆記錄能夠對應到乙資料表中的多筆記錄;而
乙資料表中的一筆記錄也能對應到甲資料表中的多
筆記錄。
例如一個客戶可訂購好幾種書, 而一本書也可賣給
好幾個客戶, 若要將兩者建立關聯, 那就是多對多
關聯了。
48
多對多關聯
49
多對多關聯

資料庫在處理多對多關聯時, 因為彼此間的關係太
複雜, 較容易發生問題, 因此通常會將這兩個資料
表重新設計, 或是在這 2 個資料表之間在加上一個
資料表, 使得它們之間成為 2 個一對多的關聯。
50
SQL 語法

DCL (data control language)

DML (data management language)

DDL (data definition language)
51
DML

INSERT(新增)
Insert into table (field1, field2, …) values (value1, value2,
value3, …)

DELETE(刪除)
delete from table where conditions

UPDATE(修改)
update table set field1=value1, field2=value2, … where
conditions

SELECT( 查詢)
Select field1, field2, … from table where conditions

52