資料庫管理系統 (DBMS) 簡介
資料庫管理系統 (DBMS) 是現代軟體應用程式的重要組成部分,是有效管理、儲存和檢索資料的組成部分。它們提供了處理資料庫的系統方法,確保資料的一致性、可靠性和安全性。本文涵蓋了 DBMS 的基本概念、元件和功能,包括資料抽象化、模式、資料庫語言、事務管理、體系結構和關鍵資料庫元素。
DBMS 的目的
DBMS 的主要目的是提供可靠、高效且使用者友好的系統來儲存和檢索資料。它充當用戶與其互動的資料之間的中介,確保隱藏資料儲存的複雜性,同時提供強大的資料管理功能。
DBMS 的主要目標包括:
-
高效率的資料儲存與檢索:利用複雜的資料結構來最佳化資料操作。
-
資料一致性與完整性: 執行規則以維護資料正確性。
-
資料安全:限制對敏感資料的未經授權的存取。
-
同時控制:確保多個使用者可以同時存取資料而不會發生衝突。
資料抽象
資料抽象化透過隱藏資料儲存的複雜性來簡化使用者與資料庫的互動方式。分為三個等級:
1. 物理層面
-
最低抽象層級,描述資料如何實體儲存在系統中。
- 專注於低階細節,例如資料區塊、檔案結構和儲存路徑。
- 通常由資料庫管理員和系統開發人員管理。
2. 邏輯層面
- 描述儲存哪些資料以及它們之間的關係。
- 使用表格、欄位和關係提供整個資料庫的結構化檢視。
- 促進物理資料獨立性,允許在物理層面進行變更而不影響邏輯結構。
3. 視圖級別
-
最高抽像等級,為不同使用者提供量身定制的資料庫視角。
- 專注於透過隱藏不必要的複雜性來簡化最終用戶的互動。
- 資料庫可能有多個視圖來滿足特定使用者的需求。
實例和模式
資料庫是根據其架構和實例來定義的。
-
架構:
- 資料庫的邏輯結構,定義表、關係和限制。
- 充當藍圖,除非明確修改,否則隨著時間的推移保持不變。
-
實例:
- 特定時刻儲存在資料庫中的資料內容。
- 隨著資料的插入、更新或刪除而不斷變化。
資料庫語言
DBMS 使用專門的語言與資料庫互動。這些大致分為:
1. 資料定義語言(DDL)
- 定義資料庫結構和模式。
- 操作範例:
-
建立:定義新表或資料庫。
-
更改:修改現有結構。
-
DROP:刪除表或資料庫。
-
DDL中的完整性限制確保資料的準確性和一致性:
-
域約束: 定義屬性的允許值。
-
引用完整性: 強製表之間的有效關係。
2. 資料操作語言(DML)
- 使用戶能夠操作資料庫中儲存的資料。
- 常用操作:
-
選擇:檢索資料。
-
插入:新增資料。
-
刪除:刪除現有資料。
-
更新:修改現有資料。
- SQL 提供了在關聯式資料庫中廣泛使用的標準化 DML 語法。
交易管理
事務是資料庫操作的邏輯單元,必須遵守ACID屬性以確保可靠性:
-
原子性:交易是不可分割的;要麼所有操作成功,要麼全部失敗。
-
一致性:交易必須使資料庫處於有效狀態。
-
隔離:並發事務不應互相干擾。
-
持久性:一旦提交,即使系統出現故障,變更也會持續存在。
DBMS 採用鎖定、日誌記錄和並發控制等機制來管理事務並確保這些屬性。
資料庫和應用程式架構
現代資料庫遵循三層架構來分離關注點並增強可擴展性:
-
示範層:
- 面向使用者的層,通常是前端應用程式。
- 透過圖形介面或網頁與使用者互動。
-
應用層:
- 實作業務規則和應用程式邏輯的邏輯層。
- 連接前端與資料庫。
-
資料庫層:
- 儲存和管理資料的後端。
- 包括 DBMS 和實體儲存系統。
資料庫使用者和管理員
使用者類型:
-
最終用戶:使用應用程式或查詢與資料庫互動。
-
應用程式程式設計師:使用 DBMS 提供的 API 開發軟體應用程式。
-
資料庫管理員 (DBA): 管理資料庫、控制存取並確保最佳效能。
DBA 的角色:
- 定義和維護模式。
- 實施安全措施。
- 監控和最佳化資料庫效能。
- 執行備份和復原作業。
表格及其組件
表是關聯式資料庫的基本結構,由行和列組成。
-
行(元組): 代表表中的各個記錄。
-
列(屬性): 表示具有特定資料類型的資料欄位。
-
主鍵:唯一標識表中的每一行。
-
外鍵:透過引用其他表中的主鍵來建立表之間的關係。
資料庫中的鍵
金鑰對於確保資料完整性和建立關係至關重要。常見類型包括:
-
主鍵:表行的唯一識別碼。不能包含 NULL 值。
-
外鍵:引用另一個表中的主鍵,強制引用完整性。
-
候選鍵:可以唯一標識一行的任何列或列集。選擇一個候選鍵作為主鍵。
-
複合鍵: 由兩個或更多屬性組成的主鍵。
-
唯一鍵:與主鍵類似,但允許一個 NULL 值。
-
超級鍵:唯一標識行的候選鍵的超集。
DBMS 中的函數、過程和觸發器
除了管理和查詢資料之外,現代 DBMS 還透過 函數、流程和觸發器提供封裝邏輯和自動化任務的機制。這些元素提高了資料庫系統的效率、可維護性和回應能力。
功能
函數是執行特定任務並傳回單一值的資料庫物件。函數通常用於計算、資料轉換或檢索特定資訊。它們類似於數學函數,可以直接在 SQL 查詢中呼叫。
功能特點:
-
輸入參數:函數可以接受零個或多個輸入參數。
-
傳回值:函數總是傳回指定資料類型的單一值。
-
唯讀:函數不能直接修改資料庫表或資料;它們僅限於唯讀操作。
建立函數的語法(SQL 範例):
CREATE FUNCTION function_name (parameter_list)
RETURNS return_type
AS
BEGIN
-- Function logic
RETURN value;
END;
登入後複製
登入後複製
登入後複製
例子:
根據數量和單位價格計算訂單總價的函數:
CREATE FUNCTION calculate_total_price(quantity INT, price_per_unit DECIMAL)
RETURNS DECIMAL
AS
BEGIN
RETURN quantity * price_per_unit;
END;
登入後複製
登入後複製
登入後複製
優點:
- 跨查詢的邏輯可重複使用性。
- 提高了查詢的可讀性和可維護性。
- 透過封裝複雜邏輯來增強效能。
程式
過程是資料庫中執行一系列操作的儲存程式。與函數不同,程序不會傳回值,但可以執行資料修改任務,例如 INSERT、UPDATE 和 DELETE。
程序特點:
- 可以有輸入、輸出和輸入輸出參數。
- 能夠修改資料庫表。
- 使用 CALL 或 EXEC 語句執行。
建立過程的語法(SQL 範例):
CREATE PROCEDURE procedure_name (parameter_list)
AS
BEGIN
-- Procedure logic
END;
登入後複製
登入後複製
例子:
更新員工薪資的程序:
CREATE PROCEDURE update_salary(employee_id INT, new_salary DECIMAL)
AS
BEGIN
UPDATE employees
SET salary = new_salary
WHERE id = employee_id;
END;
登入後複製
登入後複製
優點:
- 將複雜邏輯封裝成可重複使用的單元。
- 能夠在一次呼叫中執行多個操作。
- 透過減少網路開銷來提高資料庫效能。
觸發器
觸發器是一個資料庫對象,它會自動執行預先定義的操作以回應表上的特定事件,例如 INSERT、UPDATE 或 DELETE 操作。
觸發器的特點:
- 在特定表上定義並由事件啟動。
- 可以在事件發生前或之後觸發。
- 用於執行業務規則、維護審核日誌或傳播變更。
觸發器類型:
-
BEFORE 觸發器: 在指定事件之前執行。
-
AFTER 觸發器: 在指定事件後執行。
-
INSTEAD OF 觸發器: 取代事件執行(常用於視圖)。
建立觸發器的語法(SQL 範例):
CREATE FUNCTION function_name (parameter_list)
RETURNS return_type
AS
BEGIN
-- Function logic
RETURN value;
END;
登入後複製
登入後複製
登入後複製
例子:
記錄新增到員工表中的每個新員工的觸發器:
CREATE FUNCTION calculate_total_price(quantity INT, price_per_unit DECIMAL)
RETURNS DECIMAL
AS
BEGIN
RETURN quantity * price_per_unit;
END;
登入後複製
登入後複製
登入後複製
優點:
- 自動執行規則和政策。
- 減少重複性任務的人工幹預。
- 透過維護更改日誌來增強可審核性。
函數、過程、觸發器:主要區別
功能 |
函數 |
程式 |
觸發器 |
標題>
Feature |
Function |
Procedure |
Trigger |
Returns Value |
Yes |
No |
No |
Modifies Data |
No |
Yes |
Yes |
Execution |
Invoked explicitly |
Invoked explicitly |
Invoked automatically |
Use Case |
Data computation |
Complex operations |
Event-driven actions |
回傳值 |
是 |
否 |
否 |
修改資料 |
否 |
是 |
是 |
執行 |
明確呼叫 |
明確呼叫 |
自動呼叫 |
用例 |
資料計算 |
複雜操作 |
事件驅動的操作 |
表>
透過有效地使用函數、流程和觸發器,您可以封裝業務邏輯、執行規則並在資料庫中自動執行任務。這些工具構成了現代 DBMS 應用程式的支柱,使開發人員和管理員能夠創建強大且可維護的系統。
在 DBMS 中映射基數
映射基數,也稱為基數比,定義一個實體集中可以透過關係集與另一個實體集中的實體關聯的實體數量。這些基數在描述二元關係集時特別重要,對於多實體關係也很有用。
對於實體集A和B之間的二元關係集R,可能的映射基數如下:
1. 一對一(1:1)
-
定義: A 中的一個實體最多與 B 中的一個實體關聯,反之亦然。
-
範例:
- 在員工被指派到停車位的資料庫:
- 每位員工最多分配一個停車位。
- 每個停車位最多分配給一名員工。
-
圖表表示:
- A 中的每個實體對應到 B 中的單一實體,B 中的每個實體對應到 A 中的單一實體。
2. 一對多(1:N)
-
定義: A 中的實體可以與 B 中的零個或多個實體關聯,但 B 中的實體最多與 A 中的一個實體關聯。
-
範例:
- 在作者與書籍資料庫:
- 一個作者可以寫多本書。
- 每本書僅由一位作者撰寫。
-
圖表表示:
- A 中的實體對應到 B 中的多個實體,但 B 中的實體會對應到 A 中的單一實體。
3. 多對一(M:1)
-
定義: A 中的實體最多與 B 中的一個實體關聯,但 B 中的實體可以與 A 中的零個或多個實體關聯。
-
範例:
- 在學生和課程的資料庫中:
- 每個學生只能報讀一個系。
- 一個系所可以招收多名學生。
-
圖表表示:
- A 中的實體對應到 B 中的單一實體,而 B 中的實體可以對應到 A 中的多個實體。
4. 多對多(M:N)
-
定義: A 中的實體可以與 B 中的零個或多個實體關聯,反之亦然。
-
範例:
- 在學生和課程的資料庫中:
- 一個學生可以報名多門課程。
- 一門課程可以有多位學生註冊。
-
圖表表示:
- A 中的多個實體對應到 B 中的多個實體,反之亦然。
映射基數的視覺表示
一對一(1:1):
CREATE FUNCTION function_name (parameter_list)
RETURNS return_type
AS
BEGIN
-- Function logic
RETURN value;
END;
登入後複製
登入後複製
登入後複製
一對多 (1:N):
CREATE FUNCTION calculate_total_price(quantity INT, price_per_unit DECIMAL)
RETURNS DECIMAL
AS
BEGIN
RETURN quantity * price_per_unit;
END;
登入後複製
登入後複製
登入後複製
多對一 (M:1):
CREATE PROCEDURE procedure_name (parameter_list)
AS
BEGIN
-- Procedure logic
END;
登入後複製
登入後複製
多對多 (M:N):
CREATE PROCEDURE update_salary(employee_id INT, new_salary DECIMAL)
AS
BEGIN
UPDATE employees
SET salary = new_salary
WHERE id = employee_id;
END;
登入後複製
登入後複製
映射基數的重要性
-
資料庫設計:映射基數透過定義實體集之間的清晰關係來幫助設計高效的關係模式。
-
資料完整性:確保關係符合現實世界的限制。
-
查詢最佳化:了解基數有助於最佳化查詢以獲得更好的效能。
-
E-R 模型: 在實體關係圖中發揮至關重要的作用,使關係變得明確。
映射基數是理解實體在資料庫中如何相互關聯的基礎,並為定義健全且可擴展的資料庫模式提供結構基礎。
以上是資料庫管理系統簡介的詳細內容。更多資訊請關注PHP中文網其他相關文章!