資料庫

資料庫（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所使用）：高度可擴展
- Amazon DynamoDB
- LevelDB（Google）

## 資料庫技術的發展

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

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

- 網路化的大型通用資料庫管理系統的出現

由於網路應用程式的使用者數量無法預測，這就要求資料庫相比以前擁有能處理更大量的數據以及為更多的使用者提供服務的能力，即更好的可伸縮性及高可用性，因此，能夠支持Internet的資料庫應用已經成為資料庫系統的重要方面，學術界及各主流資料庫公司都將大型通用數據管理系統作為主要發展方向。例如Oracle公司從 8 版起全面支持網際網路應用，微軟公司更是將 SQL Server 作為 其整個 .NET計劃中的一個重要的成分。

- 資料庫安全系統及技術的提升

由於資料庫系統在現代電腦系統中的地位越來越趨於核心的地位，資料庫系統的安全問題自然受到越來越多的關注。在目前各國所引用或制定的 一系列安全標準中，最重要的兩個是由美國國防部制定的《可信計算機系統的評估標準》(簡稱TCSEC)和《可信計算機系統的評估標準關於可信資料庫系統的解釋》(簡稱 TDI)。目前，所有資料庫的開發必須遵從相應的安全標準。

- XML及Web數據管理技術的普及

隨著越來越多的Web應用，如電子商務、數字圖書館、資訊服務等採用XML作為數據表現形式、越來越多網站採用XML作為資訊發布的語言，以XML格式數據為主的半結構化數據逐步成為網上數據交換和數據表示的標準。而XML具有如下的一些特徵：面向顯示、半結構化和無結構、不同形式的數據源，動態變化以及數據海量等。因此，支持這種結構鬆散、形式多樣、動態變化的海量數據的存儲、共享、管理、檢索，成了資料庫技術的大勢所趨。

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

- 半結構化數據
- Web數據查詢
- XML相關標準
- XML數據管理
- 嵌入式移動資料庫技術

隨著移動通信技術的迅速發展和投入使用，加上移動智慧型電話、移動計算機的大量普及，國內外許多研究機構都展開了對移動資料庫的研究，並取得了許多有價值的成果。移動資料庫技術涉及資料庫技術、分布式計算技術以及移動通信技術等多個學科領域，具有較高的學術起點。

## 資料庫模型

- 物件模型
- 層次模型（輕量級數據訪問協議）
- 網狀模型（大型數據儲存）
- 關係模型
- 面向對象模型
- 半結構化模型
- 平面模型（表格模型，一般在形式上是一個二維陣列。如表格模型數據Excel)

### 架構 (Schema)

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

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

### 資料庫索引

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

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

### 資料庫事務

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

事務的ACID特性：

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

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

### 網狀數據模型的數據結構

#### 網狀模型

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

- 允許一個以上的結點無雙親。
- 一個結點可以有多於一個的雙親。