
資料庫管理系統
資料庫管理系統(Database Management System, 簡稱 DBMS)是一套軟體系統,用來建立、管理、查詢與維護資料庫。它的目的是讓使用者能夠有效地儲存、檢索與操作資料,同時確保資料的安全性、一致性與完整性。以 ATM 為例,當插入卡片之後,ATM 會開始讀取晶片資料,並嘗試從資料庫中抓取帳戶、餘額等所需資訊,並提供使用者進行提款、存款、轉帳等動作。
主要功能
一個資料庫主要的功能是儲存 (store) 與提取 (retrieve) 資料,並且可以進行增 (Create)、刪 (Delete)、查 (Read)、改 (Update) 四種主要操作(稱為 CRUD)。
常見的 DBMS 種類
分類 | 例子 | 說明 |
---|---|---|
關聯式資料庫 (RDBMS) | MySQL, PostgreSQL, SQLite, Oracle, SQL Server | 資料以「表格(table)」方式儲存,支援 SQL 語言 |
非關聯式資料庫 (NoSQL) | MongoDB(文件型), Redis(鍵值型), Neo4j(圖型) | 適合儲存彈性結構或高效率存取的資料 |
嵌入式資料庫 | SQLite | 常用於手機 App 或單機應用 |
資料、資訊、資料庫與中繼資料
名詞 | 定義 | 特性 | 範例 |
---|---|---|---|
Data | 原始、未處理的事實(raw facts) | 沒有上下文、無意義、通常是文字或數字片段 | 25 , Raghav , Nagpur |
Information | 經過處理後有意義的資料 | 有上下文、能用來判斷或溝通、帶有解釋性 | Raghav is 25 years old and lives in Nagpur. |
Database | 有關聯的資料集合 | 結構化、各資料彼此相關、可用 DBMS 管理與查詢 | 銀行系統、圖書館管理系統、鐵路訂票系統 |
Meta-data | 描述其他資料的資料(資料的資料) | 非實際內容、描述檔案屬性、便於管理與搜尋 | 作者 , 建立日期 , 修改日期 , 檔案大小 |
三層式架構 (Three Tier Architecture)
三層式架構是資料庫系統的分層設計方法,將應用系統劃分為三個邏輯層次,每一層各自負責不同的功能,以達成模組化、易於管理與擴充。
層級 | 功能說明 | 舉例 |
---|---|---|
表示層 (Presentation Tier) | 使用者介面,負責與終端使用者互動 | 瀏覽器、App、Web 表單、GUI |
邏輯層 (Logic Tier) | 處理業務邏輯、規則與計算,負責處理使用者請求與資料邏輯運算 | 應用程式、API、伺服器端程式(如 Flask、Node.js) |
資料層 (Data Tier) | 負責實際資料的儲存與管理,處理資料的 CRUD 操作 | MySQL、PostgreSQL、Oracle、MongoDB |
資料庫架構與抽象化設計
為了讓使用者不用知道資料庫的所有細節,也能順利操作資料,需要將資料進行抽象化 (abstraction)。舉例來說,作為一個圖書館的讀者只需知道借還書,不用知道:
- 書籍實際儲存在哪個書架(物理位置)
- 系統如何記錄借書紀錄(資料結構)
- 資料儲存在硬碟的哪個磁區(物理儲存細節)
言下之意,將複雜的底層細節隱藏起來,只顯示出使用者需要的資訊。
層級 | 說明與職責 | 使用者類型 |
---|---|---|
外部層 (External Level) | 個別使用者看到的資料視圖(部分資料) | 一般使用者 |
邏輯層 (Logical Level) | 描述整個資料庫的結構與關聯 | 資料庫設計者、工程師 |
內部層 (Internal Level) | 資料實際儲存在磁碟的方式與細節 | 系統工程師、DBMS本身 |
綱要 (Schema) 與實例 (Instance)
在資料庫的世界中,結構與內容是兩件不同的事。這就像寫程式時會區分「變數的型別」與「變數的值」,資料庫也一樣:
名稱 | 特性 | 定義 | 舉例 |
---|---|---|---|
Schema | 靜態 | 資料庫的結構定義,描述資料的型態與關聯 | 表格的欄位名稱、資料型別、主鍵與外鍵等設定 |
Instance | 動態 | 資料庫中目前的資料內容,是 Schema 的具體化 | 某筆顯示在資料表中的實際記錄資料 |
- Schema:是一種資料庫結構的藍圖或設計圖,定義一個資料庫有哪些資料表、欄位,以及每個欄位的型別、哪些是主鍵與外鍵,甚至是欄位之間的邏輯關聯。
- Instance:是資料庫狀態的一種具體表現 (database state),在某一特定時刻,資料庫中實際儲存的資料內容。換句話說,是依照 schema 結構填進去的資料。而實例會隨時間變化,因為資料會新增、刪除、修改。
例如以下語法定義 Student
資料表,共三個欄位,並分別設定每個欄位的型別:
1 | CREATE TABLE Student ( |
當使用者進行查找時,會看到以下資訊,即是 instance:
ID | Name | Age |
---|---|---|
1 | Alice | 21 |
2 | Raghav | 25 |
如果刪除 Alice 或新增 Bob,那麼 instance 就變了,但 schema 不會動。
資料模型 (Data Model)
資料模型是一套描述資料、資料結構與資料之間關係的規則與邏輯。不只定義資料的型別與欄位,還定義了資料之間的關聯方式、完整性規則、操作方式等。
模型名稱 | 說明 | 舉例/關鍵概念 |
---|---|---|
Hierarchical Model | 資料以「樹狀結構」儲存,一對多階層關係 | 一個公司有多個部門,每部門有多員工 |
Network Model | 資料以「圖結構」儲存,支援多對多關係 | 一位學生修多門課程、一門課有多位學生 |
Relational Model | 資料以表格方式儲存,是現代主流模型 | MySQL、PostgreSQL、SQL Server 等皆使用此模型 |
Object-Oriented Model | 結合物件導向概念 | 資料與行為一起被封裝為物件,少數 DBMS 採用 |
實體關係模型 (Entity Relationship Model, ER Model)
ER 模型是一種概念資料模型,用來:
- 表示現實世界的資料結構與其之間的關聯
- 為關聯式資料庫 (Relational DB) 設計資料表之前的「藍圖」
ER 模型的產物就是 ER 圖 (ER Diagram),即是用圖形方式表示有哪些實體、有哪些關係、有哪些屬性。
概念名稱 | 說明 |
---|---|
實體 (entity) | 現實世界中可以獨立存在的事物(人、物、地點、事件等) |
屬性 (Attribute) | 實體的特徵資訊(例如學生的姓名、學號、生日) |
鍵 (Key) | 能唯一識別一個實體的屬性(通常稱為主鍵) |
關係 (Relationship) | 實體與實體之間的邏輯連結,例如選修、管理、屬於 |
基數 (Cardinality) | 關係的數量型態,如一對一、一對多、多對多 |