データベース管理システム

**データベース管理システム**（データベースかんりシステム、**DBMS**; ）は、コンピュータのデータベースを構築するために必要なデータベース運用、管理のためのシステム、およびそのソフトウェアのことである。**データベースマネジメントシステム**とも呼ばれる。

## 概要
かつては、CODASYLが提唱したネットワーク型データモデルのDBMSや、階層型データモデルのDBMS、あるいは初期の非力なパーソナルコンピュータなどではカード型データモデルのDBMS（いわゆる簡易データベースソフト）などが幅広く利用されていたが、近年では関係モデル（関係データモデル）を扱う関係データベース管理システム (RDBMS) が主流である。

また、関係データベース管理システムに、利用者が独自のデータ型や関数を拡張可能なオブジェクト関係データベース (ORDBMS) や、オブジェクト指向プログラミング言語との親和性が高いオブジェクトデータベース (ODBMS)、データモデルにXMLを採用したXMLデータベース (XML DB) などが開発され、利用が広まっている。

ネットワーク型データモデルのDBMSや、階層型データモデルのDBMSは実装の軽量性の利から早くから広まっていたが、アプリケーションソフトウェア、データの論理的構造、データの物理的構造の三者が密接に結びつき、柔軟性に欠けるという欠点があった。また、最適化の方法論がクエリ（検索質問）を作るプログラマの力量に依存することもアプリケーションの開発効率を低下させる一因となった。

関係モデルの最大の功績は、アプリケーション、データの論理的構造、データの物理的構造を三階層に分け（三階層アーキテクチャ）、論理データ独立性と物理データ独立性を実現した点にある。

### 種類
現在では、主に以下のデータベースが広く使われている。
* 関係データベース、オブジェクト関係データベース - スキーマがしっかり決まっていて、トランザクションが利用できる
* オブジェクトデータベース
*  - NoSQL系の一部で称される「列（カラム）指向データモデル」とは異なり、同一列のデータを物理的に近い領域に集約して格納されるもの。列データ集計処理などでは、行指向データベースよりも優位。
* カード型データベース
* NoSQL ("Not only SQL") 系
**  - XML (Extensible Markup Language) やJSONを利用した、スキーマレスなもの。
** 
** 

#### 補足
*三階層アーキテクチャは、古くからの階層型、ネットワーク型DBMSにおいて実装されている。さらに、三階層アーキテクチャは、階層型、ネットワーク型データベースの国際標準規格である構造型データベース(CODASYL NDL)において、最初に規定された。
*アプリケーションはビュー経由で操作し、レコード型（実表）の定義変更があっても、変更箇所を操作しないアプリケーションには影響しない。 
*データベースの物理的な格納場所の変更も、アプリケーションや論理的な定義の変更は必要としない。
*階層型、ネットワーク型とリレーショナル型DBMSの共通点、差異は、次の点にある。
**＜共通＞
**#レコード型（実表）に対し、特定の構成要素（フィールド、列）をビューとして定義し、アプリケーションから限定して操作させる。
**#ビューで定義された構成要素（フィールド、列）以外の定義変更は、アプリケーションには影響しない。
**＜差異＞
**#ビューでは、列の特定だけでなく、列が特定の値を持つ行のみを対象にできる。
**#ビューを経由しなくても、特定の列だけ、さらには特定の列の値を持つ行だけを操作対象にできる。

## DBMSの機能
以下に DBMSの、主な機能を示す。

; データベース言語
: データベース言語は、DBMS に対してさまざまな指示を伝えるための言語である。概念的には、データ定義言語 (DDL)、データ操作言語 (DML)、データ制御言語 (DCL) の構成要素からなる。データ定義言語 (DDL) はデータベースの構造を定義する。データ操作言語 (DML) はデータベースに対する検索や更新などの操作を行う。データ制御言語 (DCL) はデータに対するアクセス制御を行う。DBMS ではそのデータベースモデルに基づいたデータベース言語を備えている。例えば関係データベース管理システム (RDBMS) とされるシステムの多くは、関係データベース言語 SQL を備えている。
; 物理的データ独立性
: データベースを格納する記憶装置を変更する際、それに伴って DBMS にアクセスする方法を変更する必要はない (もしくは変更する労力が少なくて済む) 。DBMS にアクセスする利用者やアプリケーションソフトウェアに対して、DBMS は記憶装置の変更をある程度隠蔽することができる。
; 論理的データ独立性
: いくつかの種類の DBMS では論理的データ独立性を支援する。例えばRDBMSではビューを使うことができる。
; データ完全性
: 不正なデータが登録されることや、不正なデータに更新されることを、防ぐ。例えばRDBMSでは、定義域・データ型・一意性(ユニーク)制約・参照整合性制約・一般制約・トリガ などの機能を備えている。
; トランザクション処理
: ACID特性に基づいたトランザクション処理を行う。複数のユーザが同時に同一のデータを参照・更新した場合でも、不整合がなく正常に処理をこなす、又は異常を通知する（例：二人のユーザが口座から引き出しをした場合、確実に二人分の引き出しが処理される）。
; セキュリティ
: 多くの DBMS ではセキュリティ (機密保護) に関して任意アクセス制御もしくは強制アクセス制御を提供し、さらに一部の DBMS ではデータの暗号化機能も提供する。任意アクセス制御を採用している DBMS が多い。データ暗号化機能では、DBMS を迂回した不正なデータアクセスに対する対策として、DBMS で管理・送受信するデータを暗号化する。
:
:DBMSの暗号化ソリューションの方式は暗号化および復号を行う位置によって大きく3通り、アプリケーション方式、DB Plug-In方式、TDE方式と分類する。  アプリケーション方式（Application Programming Interface 、API）はアプリケーションのロジックでデータを暗号化及び復号を行う。そのためデータベースに負荷がかかる問題なく、性能劣化を最小限に抑えられる。  DB Plug-In方式はデータベース（DB）上で暗号化および復号のモジュールを実装する暗号化方式である。APIとは違ってアプリケーションから独立しているため、データベースを修正することだけで簡単に導入できる。そのためアプリケーションに対する修正はほぼ必要ない。また、全ての作業がGUI基盤で行われるため、管理の利便性を向上し、暗号化カラムに対する一致検索、範囲検索、インデックス支援に容易になる。  TDE方式（Transparent Data Encryption、TDE）はDBエンジンの内部にて暗号化および復号を行う。ソフトウェア基盤の暗号化モジュールがDBエンジンに直接設置されるため、アプリケーションの修正なくDB内部から暗号化および復号する。そのため、他の方式と比べ暗号化・復号の速度が上がる。また、必要なデータのみ暗号化することができるためシステムにかかる負荷を最小化する。
; 障害復旧
: トランザクション障害、システム障害、記憶媒体の障害からの復旧を行う。
; 最適化
: 高水準なデータベースモデルを採用する DBMS では、高水準なデータベース言語で記述されたデータ処理要求を、低水準な手続きに最適化して実行する。
; 分散データベース
: 分散データベースは、ネットワークで接続された複数のコンピュータを使い、それぞれのコンピュータ上で DBMS のプロセスを協調させて動かし、全体として仮想的に一つの DBMS を実現する技術である。複数のコンピュータを使うため、可用性や処理性能を向上させることができる。クライアント・サーバのデータベースは、分散データベースの簡単で特殊な形態と位置づけることができる。

## オープンソースソフトウェアのDBMS

## 非オープンソースソフトウェアのDBMS

## 脚注

### 注釈

## 関連項目
*データ管理システム
*バージョン管理システム
*パッケージ管理システム
*データストリーム管理システム
*ACID (コンピュータ科学)
*排他制御
*デッドロック
*コミットメント
*ロールバック