Abraham Silberschatz 等:database System Concepts@2010 (第6版)
資料庫系統概念:引言
資料庫管理系統(DBMS)是一組互相關聯的資料(通常稱為資料庫)以及一組存取這些資料的程式的集合。資料庫系統的主要目標是提供一種方便且有效率的方式來儲存和擷取資料庫資訊。
資料庫系統的應用
資料庫被廣泛應用於現代企業和組織中。典型的資料庫系統應用包括:
- 企業資訊: 涵蓋銷售(客戶、產品、採購資訊)、會計(支付、收款、餘額、資產)、人力資源(員工、薪資、稅務、福利)以及製造(供應鏈管理、產品追蹤、庫存、訂單)等方面。線上零售商則額外需要處理線上訂單追蹤、推薦列表生成及線上產品評價維護。
- 銀行與金融: 包括銀行業務(客戶、帳戶、貸款、交易)、信用卡交易(消費、月結單)及金融市場(持股、買賣、即時市場數據、線上交易)等方面。
- 大學: 除了標準的企業資訊(人力資源、會計),還需管理學生資訊、課程註冊及成績。
- 航空公司: 用於預訂和航班時刻資訊,是地理上分佈式資料庫的早期應用範例。
- 電信業: 記錄通話明細、生成帳單、維護預付卡餘額,以及儲存通信網絡資訊。
隨著科技發展,特別是網際網路的普及,越來越多使用者直接透過網頁介面與資料庫互動,例如線上購物或查詢銀行帳戶餘額。資料庫系統已成為企業運作不可或缺的核心。
資料庫系統的目標與檔案處理系統的限制
在資料庫管理系統問世之前,組織通常使用傳統的檔案處理系統來儲存和管理資料。然而,這種方法存在許多重大缺點:
- 資料冗餘和不一致性(Data Redundancy and Inconsistency): 由於不同應用程式獨立管理檔案,相同資料可能在多個地方重複儲存。例如,同一位學生的地址可能同時出現在不同系所的檔案中。這不僅浪費儲存空間,還可能導致資料不一致,例如更新了一處的地址而遺漏了另一處。
- 資料存取困難(Difficulty in Accessing Data): 檔案處理系統通常需要為每個特定的資料查詢需求編寫新的應用程式。如果查詢未被事先預見,則需要手動處理或等待新程式的開發,效率低下且不靈活。
- 資料隔離(Data Isolation): 資料分散在不同格式的檔案中,使得編寫新的應用程式來整合和存取這些資料變得困難。
- 資料完整性問題(Integrity Problems): 資料庫中儲存的資料值必須滿足一定的完整性約束(例如,銀行帳戶餘額不能為負)。在檔案處理系統中,這些約束由各個應用程式強制執行,修改或增加約束需要修改大量程式碼,容易出錯。
- 原子性問題(Atomicity Problems): 在發生系統故障時,交易(一組相關操作)可能只執行了一部分。例如,在資金轉帳中,可能只扣除了款項但未增加到目標帳戶。確保交易的「全有或全無」(原子性)在檔案系統中很難實現。
- 併發存取異常(Concurrent-Access Anomalies): 當多個使用者同時存取和修改資料時,如果沒有適當的協調機制,可能會導致資料不一致。例如,兩個使用者同時從同一個帳戶取款,可能導致最終餘額不正確。
- 安全問題(Security Problems): 檔案處理系統難以精細地控制不同使用者對不同資料項的存取權限。例如,在大學系統中,薪資部門的員工不應存取學生的成績記錄。
資料庫系統應運而生,旨在解決檔案處理系統的這些問題,提供更有效、更可靠、更安全和更方便的資料管理方式。
資料的視圖
資料庫系統提供抽象的資料視圖,向使用者隱藏資料儲存和維護的複雜細節。這種抽象分為幾個層次:
- 物理層次(Physical Level): 最低層次,描述資料如何實際儲存,涉及複雜的低階資料結構細節。
- 邏輯層次(Logical Level): 中間層次,描述資料庫中儲存了哪些資料以及資料之間的關係。它使用簡單的結構描述整個資料庫,並隱藏物理層次的複雜性。這稱為物理資料獨立性。資料庫管理員通常在此層次工作。
- 視圖層次(View Level): 最高層次,描述資料庫的一部分。為簡化使用者互動和提供安全機制,資料庫系統可以為不同使用者提供不同的資料視圖。
資料實體與綱要(Instances and Schemas)
資料庫的內容會隨時間而變化,特定時刻儲存在資料庫中的資訊集合稱為資料庫的實體(instance)。資料庫的整體設計稱為資料庫綱要(schema)。綱要不常改變。資料庫系統具有多個綱要,對應於抽象層次:物理綱要(Physical Schema)、邏輯綱要(Logical Schema)和視圖綱要(View Schema)。邏輯綱要對應用程式影響最大,因為程式設計師是基於邏輯綱要開發應用程式的。物理綱要可以改變而通常不影響應用程式,這稱為物理資料獨立性(Physical Data Independence)。
資料模型(Data Models)
資料模型是描述資料、資料關係、資料語義和一致性約束的概念工具集合。常見的資料模型包括:
- 關聯式模型(Relational Model): 使用表格集合來表示資料及其關係。每個表格有唯一的名稱和多個列(屬性)。這是目前最廣泛使用的資料模型。
- 實體—關係模型(Entity-Relationship Model): 使用實體和關係來描述資料庫設計。實體是現實世界中可區分的「事物」或「物件」,關係是實體之間的關聯。該模型廣泛用於資料庫設計。
- 物件導向模型(Object-Based Data Model): 基於物件導向程式設計概念,將E-R模型擴展為支援封裝、方法和物件識別。物件關聯式模型結合了物件導向和關聯式模型的特性。
- 半結構化模型(Semistructured Data Model): 允許同一類型的個別資料項目具有不同的屬性集,例如XML。
資料庫語言(Database Languages)
資料庫系統提供資料定義語言(DDL)和資料操作語言(DML)。
- 資料操作語言(DML): 用於存取或操作資料。分為程序性DML(指定如何獲取資料)和宣告性DML(僅指定需要什麼資料)。宣告性DML通常更容易使用。查詢是要求資料檢索的語句,DML中涉及檢索的部分稱為查詢語言。SQL是廣泛使用的宣告性查詢語言。
- 資料定義語言(DDL): 用於指定資料庫綱要以及資料的其他屬性,例如資料類型、一致性約束(域約束、參考完整性、斷言)和授權。DDL的輸出儲存在資料字典中,其中包含元資料(資料的資料)。
關聯式資料庫(Relational Databases)概述
關聯式資料庫基於關聯式模型,使用表格(關係)來表示資料。表格由行(元組)和列(屬性)組成。SQL是標準的關聯式資料庫語言。
- 表格: 每個表格有唯一的名稱,包含多個列(屬性)。行表示屬性值之間的關係。
- 資料操作語言: SQL的select-from-where語句用於查詢資料。可以從單個或多個表中檢索資料,並應用選擇條件和連接操作。
- 資料定義語言: SQL的create table語句用於定義表格綱要,包括屬性名稱、資料類型和約束(如主鍵、外鍵)。
- 應用程式存取: SQL可以透過應用程式程式介面(如JDBC、ODBC)或嵌入式SQL從通用程式語言中執行。
資料庫設計(Database Design)
資料庫設計是創建資料庫綱要的過程。設計過程通常包括以下階段:
- 需求收集與分析: 與使用者和領域專家互動,收集資料需求。
- 概念設計: 選擇一個高階資料模型(如E-R模型),將需求轉換為概念綱要,描述實體、關係和約束。
- 邏輯設計: 將概念綱要映射到實作資料模型(如關聯式模型),生成系統特定的資料庫綱要。
- 物理設計: 指定物理儲存特性,如檔案組織和索引結構。
E-R模型是常用的概念設計工具,使用實體、關係和屬性來描述資料庫結構。關聯式資料庫設計涉及將E-R設計轉換為關聯式綱要,並使用正規化理論來避免冗餘和資料異常。
資料儲存與查詢(Data Storage and Querying)
資料庫系統通常分為儲存管理器和查詢處理器。
- 儲存管理器(Storage Manager): 提供資料庫低階資料與應用程式之間的介面。負責資料的儲存、檢索和更新。組件包括授權和完整性管理器、事務管理器、檔案管理器和緩衝管理器。資料結構包括資料檔案、資料字典和索引。
- 查詢處理器(Query Processor): 負責編譯和執行DDL和DML語句。組件包括DDL解釋器、DML編譯器(包含查詢優化)和查詢執行引擎。
事務管理(Transaction Management)
事務(Transaction)是一組操作,從使用者的角度看是一個單一的邏輯單元。事務必須滿足ACID屬性:
- 原子性(Atomicity): 事務的全部操作要麼全部成功,要麼全部失敗。
- 一致性(Consistency): 事務執行前後,資料庫應保持一致狀態。
- 隔離性(Isolation): 併發執行的事務之間互不干擾,感知不到其他事務的存在。
- 持久性(Durability): 事務成功完成後,其對資料庫的改變是永久性的,即使發生系統故障。
事務管理器確保這些屬性。它包括併發控制管理器(處理併發事務)和恢復管理器(處理系統故障)。
資料庫體系結構(Database Architecture)
資料庫系統體系結構受底層計算機系統影響。常見的體系結構包括:
- 集中式系統(Centralized Systems): 所有資料和處理都在單一計算機上。
- 客戶端—伺服器系統(Client–Server Systems): 處理分散在客戶端和伺服器之間。
- 平行系統(Parallel Systems): 利用多處理器和多磁碟並行處理。
- 分散式系統(Distributed Systems): 資料儲存在多個物理位置上,透過網絡通訊。
資料倉儲、資料挖掘與資訊檢索
- 資料倉儲(Data Warehousing): 從多個異質來源收集資料,儲存於一個中央資料庫中,用於決策支援。
- 資料挖掘(Data Mining): 半自動分析大型資料庫,發現有用的模式和知識。
- 資訊檢索(Information Retrieval): 處理非結構化文本資料的查詢,例如網頁搜尋引擎。
專業資料庫(Specialty Databases)
針對特定應用領域的需求,發展出各種專業資料庫:
- 物件導向資料庫(Object-Based Databases): 基於物件導向概念,支援複雜資料類型。物件關聯式模型結合了關聯式和物件導向的特性。
- 半結構化資料庫(Semistructured Databases): 處理非結構化資料,例如XML。
資料庫使用者與管理員(Database Users and Administrators)
資料庫使用者根據與系統互動方式分為:
- 終端使用者(Naive Users): 透過應用程式與系統互動。
- 應用程式設計師(Application Programmers): 編寫應用程式。
- 資深使用者(Sophisticated Users): 直接使用查詢語言或分析工具。
- 專業使用者(Specialized Users): 編寫特殊資料庫應用程式。
資料庫管理員(DBA)負責資料庫的中央控制,職責包括綱要定義、儲存結構管理、完整性約束和授權管理、以及日常維護。
資料庫系統歷史(History of Database Systems)
資料庫技術從早期的檔案處理系統演進,經歷了網絡模型、層次模型,最終由關聯式模型取代。System R和Ingres等項目為關聯式資料庫的商業化奠定了基礎。SQL成為標準語言。近年來,資料倉儲、資料挖掘、物件關聯式和XML資料庫,以及雲端資料庫和巨量資料處理成為重要趨勢。
comments
comments for this post are closed