Database

**資料庫**，簡而言之可視為電子化的檔案櫃 —— 儲存電子檔案的處所，使用者可以對檔案中的資料執行新增、擷取、更新、刪除等操作。

所謂「資料庫」是以**一定方式**儲存在一起、能予多個使用者共享、具有儘可能小的冗餘度、與應用程式彼此獨立的資料集合。一個資料庫由多個表空間（Tablespace）構成。

## 技術初衷

在作業系統出現之後，隨著電腦應用範圍的擴大、需要處理的資料迅速膨脹。最初，資料與程式一樣，以簡單的檔案作為主要儲存形式。以這種方式組織的資料在邏輯上更簡單，但可延伸性差，存取這種資料的程式需要了解資料的具體組織格式。當系統資料量大或者使用者瀏覽量大時，應用程式還需要解決資料的完整性、一致性以及安全性等一系列的問題。因此，必須開發出一種系統軟體，它應該能夠像作業系統封鎖了硬體存取複雜性那樣，封鎖資料存取的複雜性。由此產生了資料管理系統，即資料庫。

## 資料庫管理系統

資料庫管理系統（英語：Database Management System，簡稱 DBMS）是為管理資料庫而設計的電腦軟體系統，一般具有儲存、擷取、安全保障、備份等基礎功能。資料庫管理系統可以依據它所支援的資料庫模型來作分類，例如關聯式、XML；或依據所支援的電腦類型來作分類，例如伺服器群集、行動電話；或依據所用查詢語言來作分類，例如 SQL、XQuery；或依據效能衝量重點來作分類，例如最大規模、最高執行速度；亦或其他的分類方式。不論使用哪種分類方式，一些 DBMS 能夠跨類別，例如，同時支援多種查詢語言。

## 資料庫的分類

隨著資料庫技術與其他分支學科技術的結合，出現了多種新型資料庫，例如：與分布處理技術結合產生的分散式資料庫、與並列處理技術結合產生的並列資料庫、與人工智慧結合產生的演繹資料庫、與多媒體技術結合產生的多媒體資料庫。另外，資料庫技術應用於特定的領域，出現了工程資料庫、 地理資料庫、統計資料庫、空間資料庫等特定領域資料庫。

### 關聯式資料庫

* MySQL
  * MariaDB（MySQL 的代替品，維基媒體基金會專案已從 MySQL 轉向 MariaDB）
  * Percona Server（MySQL 的代替品）
* PostgreSQL
* Microsoft Access
* Microsoft SQL Server
* Google Fusion Tables
* FileMaker
* Oracle 資料庫
* Sybase
* dBASE
* Clipper
* FoxPro
* foshub

幾乎所有的資料庫管理系統都配備了一個開放式資料庫連接（ODBC）驅動程式，令各個資料庫之間得以互相整合。

### 非關係型資料庫（NoSQL）

* BigTable（Google）
* Cassandra
* MongoDB
* CouchDB
* Redis

#### 鍵值資料庫

* Apache Cassandra（為 Facebook 所使用）：高度可延伸
* Dynamo
* LevelDB（Google）

## 資料庫技術的發展

隨著網際網路的普及，資料庫使用環境也隨之發生變化，這種變化主要體現為 XML 和 Java 技術的大量使用、要求支援各種網際網路環境下的應用伺服器、極容易出現大量使用者同時存取資料庫、要求支援 7x24 小時不間斷執行和高安全性等。

為解決由於這些變化所帶來的新問題，資料庫管理系統也逐漸產生變化，包括：

1. **網路化的大型通用資料庫管理系統的出現**由於網際網路應用的使用者數量無法預測，這就要求資料庫相比以前擁有能處理更大量的資料以及為更多的使用者提供服務的能力，即更好的可伸縮性及高可用性，因此，能夠支援 Internet 的資料庫應用已經成為資料庫系統的重要方面，學術界及各主流資料庫公司都將大型通用資料管理系統作為主要發展方向。例如 Oracle 公司從 8 版起全面支援網際網路應用，微軟公司更是將 SQL Server 作為 其整個 .NET 計劃中的一個重要的成分。
2. **資料庫安全系統及技術的提升**由於資料庫系統在現代電腦系統中的地位越來越趨於核心的地位，資料庫系統的安全問題自然受到越來越多的關注。在目前各國所參照或制定的 一系列安全標準中，最重要的兩個是由美國國防部制定的《可信電腦系統的評估標準》(簡稱 TCSEC) 和《可信電腦系統的評估標準關於可信資料庫系統的解釋》(簡稱 TDI)。目前，所有資料庫的開發必須遵從相應的安全標準。
3. **XML 及 Web 資料管理技術的普及**隨著越來越多的 Web 應用，如電子商務、數字圖書館、資訊服務等採用 XML 作為資料表現形式、越來越多網站採用 XML 作為資訊發布的語言，以 XML 格式資料為主的半結構化資料逐步成為網上資料交換和資料表示的標準。而 XML 具有如下的一些特徵：面向顯示、半結構化和無結構、不同形式的資料來源，動態變化以及資料海量等。因此，支援這種結構鬆散、形式多樣、動態變化的海量資料的儲存、共享、管理、檢索，成了資料庫技術的大勢所趨。

Web 資料管理是一個很鬆散的概念，大體上它是指在 Web 環境下對各種複雜資訊的有效組織與整合，進行方便而準確的資訊查詢和發布。當前 Web 資料管理的研究開發方向主要包括：半結構化資料管理、Web 資料查詢、Web 資訊整合、XML 資料管理等。到目前為止，XML 與 Web 資料管理的研究工作中主要集中在如下的一些方面。

  * 半結構化資料
  * Web 資料查詢
  * XML 相關標準
  * XML 資料管理
4. **嵌入式行動資料庫技術**隨著行動通訊技術的迅速發展和投入使用，加上移動智慧型電話、行動電腦的大量普及，國內外許多研究機構都展開了對行動資料庫的研究，並取得了許多有價值的成果。行動資料庫技術涉及資料庫技術、分散式計算技術以及行動通訊技術等多個學科領域，具有較高的學術起點。

## 資料庫模型

* 物件模型
* 層次模型（輕量級資料存取協定）
* 網狀模型（大型資料儲存）
* 關係模型
* 物件導向模型
* 半結構化模型
* 平面模型（表格模型，一般在形式上是一個二維陣列。如表格模型資料 Excel)

### 架構 (Schema)

資料庫的架構可以大致區分為三個概括層次：內層、概念層和外層。

* 內層：最接近實際儲存體，亦即有關資料的實際儲存方式。
* 外層：最接近使用者，即有關個別使用者觀看資料的方式。
* 概念層：介於兩者之間的間接層。

### 資料庫索引

資料索引的觀念由來已久，像是一本書前面幾頁都有目錄，目錄也算是索引的一種，只是它的分類較廣，例如車牌、身分証字號、條碼等，都是一個索引的號碼，當我們看到號碼時，可以從號碼中看出其中的端倪，若是要找的人、車或物品，也只要提供相關的號碼，即可迅速查到正確的人事物。

另外，索引跟欄位有著相應的關係，索引即是由欄位而來，其中欄位有所謂的關鍵欄位（Key Field），該欄位具有唯一性，即其值不可重複，且不可為 "空值（null）"。例如：在合併資料時，索引便是扮演欲附加欄位資料之指向性用途的角色。故此索引為不可重複性且不可為空。

### 資料庫事務

事務（transaction）包含一組資料庫操作的邏輯工作單元，在事務中包含的資料庫操作是不可分割的整體，這些操作要麼一起做，要麼一起回滾（Roll Back）到執行前的狀態。
事務的 ACID 特性：

* 原子性（atomicity）
* 一致性（consistency）
* 隔離性（isolation）
* 持續性（durability）

事務的並行性是指多個事務的並列操作輪流交叉執行，事務的並行可能會存取和儲存不正確的資料，破壞交易的隔離性和資料庫的一致性。

### 網狀資料模型的資料結構

#### 網狀模型

滿足下面兩個條件的基本層次聯絡的集合為網狀模型。

1. 允許一個以上的結點無雙親；
2. 一個結點可以有多於一個的雙親。

## 參考文獻

## 參見

* 資料庫理論
* 資訊科技稽核
* LDAP（輕量級資料存取協定）
* SQL（結構化查詢語言）
* 資料庫管理系統