[[Image:DVD Rental Query.png|thumb|SQL言語の[[SELECT (SQL)|SELECT文]]とその実行結果を示す。|upright=1.35]]
[[コンピューティング]]において、'''データベース'''({{Lang-en-short|database}})は、電子的に保存され、アクセスできる組織化された[[データ]]の集合である。実[[記憶装置|メモリ]]に保存されるもの、[[Comma-Separated Values|CSV]]などの[[ファイル (コンピュータ)|ファイル]]に保管される物、[[オペレーティングシステム|OS]]のファイルシステムなどから、後述の[[データベース管理システム]]を使った大規模なものまである。
小規模なデータベースはOSの[[ファイルシステム]]上にファイルとして保存されるが、大規模なデータベースはOSに依存しない低レベルなフォーマットで外部[[記憶装置]]に保存される。また[[コンピュータ・クラスター]]または[[クラウドストレージ]]で保存される。[[データベース設計]]に関わる分野は多岐にわたり、[[データモデリング]]、効率的なデータ表現と保存、[[問い合わせ言語|クエリ言語]]、機密データの{{Ill2|データベース・セキュリティ|en|Database security|label=セキュリティ}}や[[情報プライバシー|プライバシー]]、[[並行計算|同時アクセス]]と[[フォールトトレランス]]のサポートを含む[[分散コンピューティング]]の課題など、形式技術と実用的な考慮事項に及ぶ。
'''[[データベース管理システム]]'''('''DBMS''')は、[[エンドユーザー]]、アプリケーション、およびデータベース自体と対話し、データを取得し分析するための[[ソフトウェア]]である。さらに、DBMSソフトウェアには、データベースを管理するために提供される関連機能も含まれている。データベース、DBMS、関連アプリケーションの全体を含めて'''データベースシステム'''と呼ぶ。しばしば「データベース」という用語が、DBMS、データベースシステム、またはデータベースに関連するアプリケーションのいずれかを指す場合に漠然と使われている。
コンピュータ科学者は、データベース管理システムを、サポートする[[データベースモデル]]に基づいて分類している。[[関係データベース|リレーショナルデータベース]]は、[[1980年代]]の主流であった。これらは、データを一連の[[表 (データベース)|表]]の[[行 (データベース)|行]]と[[列 (データベース)|列]]としてモデル化し、大多数はデータの書き込みとクエリ(問い合わせ)に[[SQL]]を使用する。[[2000年代]]には、異なる[[問い合わせ言語|クエリ言語]]を使用する [[NoSQL]] と総称される非リレーショナルデータベースが普及した。
== 用語と概要 ==
* '''検索'''(''Retrieval'')- 情報を直接利用できる形式で、または他のアプリケーションでさらに処理できる形式で提供する。検索したデータは、基本的にデータベースに保存されているのと同じ形式で利用できる他、データベースの既存のデータを変更または組み合わせて得た新たな形式でも利用することができる<ref>{{cite web |url=http://www.merriam-webster.com/dictionary/retrieval |title=Retrieval – Definition of retrieval by Merriam-Webster |work=merriam-webster.com |access-date=2022-08-14}}</ref>。
* '''管理'''(''Administration'')- ユーザーの登録と監視、データセキュリティの実施、性能の監視、[[データ完全性]]の維持、並行性制御の対応、予期しないシステム障害などの事象によって破損した情報の回復など<ref>{{cite web |url=http://www.merriam-webster.com/dictionary/administration |title=Administration – Definition of administration by Merriam-Webster |work=merriam-webster.com |access-date=2022-08-14}}</ref>。
データベースとそのDBMSは共に、特定の[[データベースモデル]]の原則に準拠している{{sfn|Tsitchizris|Lochovsky|1982}}。 「データベースシステム」とは、データベースモデル、データベース管理システム、データベースを総称したものである{{sfn|Beynon-Davies|2003}}。
物理的には、データベース・[[サーバー (コンピューター)|サーバー]]は、実際のデータベースを格納し、DBMSと関連ソフトウェアのみを実行する専用コンピュータである。データベース・サーバーは通常、大容量のメモリと、安定したストレージ(例: [[RAID]]ディスクアレイ)を備えた[[マルチプロセッサ]]・コンピュータである。大容量の[[トランザクション処理]]環境では、複数台のサーバーと高速[[チャネル・コントローラ|チャネル]]を介して接続された[[ハードウェアアクセラレーション|ハードウェア・データベース・アクセラレータ]]も使用される。ほとんどの{{Ill2|データベース・アプリケーション|en|Database application}}の中心にDBMSがある。DBMSは、ネットワークのサポートを組み込んだカスタムの[[マルチタスク]]・[[カーネル]]を中心に構築されることもあるが、最近のDBMSは通常、これらの機能を提供するために、標準的な[[オペレーティングシステム]]に依存している{{cn|reason=This has become a mish-mash people's opinion and while boardly accurate may be in places undue and ignored e.g. SAN storage and needs cited rewrite from scrach|date=January 2020}}。
DBMSは重要な{{Ill2|市場 (経済学)|en|Market (economics)|label=市場}}を形成しているため、コンピューターやストレージのベンダーは、自社の開発計画にDBMSの要件を考慮に入れていることが多い{{sfn|Nelson|Nelson|2001}}。
データベースとDBMSは、サポートするデータベースモデル(リレーショナルや[[Extensible Markup Language|XML]]など)、実行するコンピュータの種類(サーバークラスタから携帯電話まで)、データベースへのアクセスに使用するクエリ言語(SQLや[[XQuery]]など)、内部エンジニアリング(性能、[[スケーラビリティ]]、障害許容力、およびセキュリティに影響する)によって分類することができる。
== 歴史 ==
データベースとそれぞれのDBMSの規模、機能、性能は桁違いに大きくなっている。これらの性能向上は、[[中央処理装置|プロセッサ]]、[[コンピュータメモリ]]、[[コンピュータデータストレージ|コンピュータストレージ]]、および[[コンピュータネットワーク]]の技術進歩により可能となった。データベースの概念は、[[1960年代]]半ばに広く普及した磁気ディスクなどの[[直接アクセス記憶装置|直接アクセス記憶媒体]]の出現によって可能となった。それ以前のシステムは、[[磁気テープ]]へのデータの順次保存に依っていた。その後のデータベース技術の発展は、[[データモデル]]または[[データ構造]]に基づいて、[[ナビゲーショナルデータベース|ナビゲーショナル]]{{sfn|Bachman|1973}}、SQL/[[リレーショナル関係データベース|リレーショナル]]、ポストリレーショナルの3つの時代に分けることができる。
初期のナビゲーショナル・データモデルは、[[階層型データモデル|階層型モデル]]と[[ネットワーク型データモデル|ネットワーク型モデル]]([[CODASYL]]モデル)の2つが主であった。これらは、あるレコードから別のレコードへの関係を追跡するために、[[ポインタ (プログラミング)|ポインタ]](多くの場合、物理的なディスクアドレス)を使用することが特徴であった。
1970年に[[エドガー・F・コッド]]が提唱した[[リレーショナルモデル]]は、この伝統から脱却するもので、アプリケーションがリンクをたどるのではなく、内容からデータを検索すべきであると主張するものであった。リレーショナルモデルは、元帳型の表<!-- ledger-style tables -->の集まりを組み合わせたもので、それぞれの表は異なる種類のエンティティ(実体)を格納する。1980年代半ばになって、コンピューティング・ハードウェアは、リレーショナルシステム(DBMSとアプリケーション)を幅広く普及するのに十分な性能を持つようになった。けれども、[[1990年代]]初頭には、すべての大規模な[[データ処理]]アプリケーションにおいてリレーショナルシステムが主流となり、2018年現在も主流であり続けている。[[IBM Db2]]、[[Oracle Database|Oracle]]、[[MySQL]]、[[Microsoft SQL Server]]、[[PostgreSQL]]は、最も検索されている[[DBMS]]である<ref>{{cite web |url=https://pypl.github.io/DB.html |title=TOPDB Top Database index |work=pypl.github.io |access-date=2022-07-16}}</ref>。リレーショナルモデル用の主要な[[データベース言語]]である標準SQLは、他のデータモデル用のデータベース言語にも影響を与えた{{Citation needed|date=March 2013}}。
[[オブジェクトデータベース]]は、[[オブジェクト指向]]とリレーショナル型との[[インピーダンスミスマッチ]](相性の欠如)による不便さを解消するために1980年代に開発され、これにより「ポストリレーショナル(''post-relational'')」という言葉が生まれ、また、ハイブリッド型の[[オブジェクトリレーショナルデータベース|オブジェクト・リレーショナルデータベース]]も開発された。
=== 1970年代後半、SQL DBMS ===
[[1970年代]]前半、IBMは、''[[System R]]''として、コッドの概念に大まかに基づいたプロトタイプシステムの開発を始めた。最初のバージョンは1974年5月に完成し、その後、レコードを構成するすべての要素(一部はオプション)を単一の大きな「チャンク(''chunk''、塊)」に格納する必要がないように、データを分割できるマルチテーブルシステムに対応する作業が開始された。その後、1978年と1979年にマルチユーザーバージョンが顧客によってテストされ、その時点では標準化されていた[[問い合わせ言語|クエリ言語]]SQLが追加されていた{{Citation needed|reason=First version of SQL standard was SQL-86 adopted in 1986|date=May 2012}}。コッドのアイデアは、実行可能でCODASYLよりも優れたものとして確立され、IBMが''SQL/DS''として知られるSystem Rの真の製品版、そして後に''Database 2''([[IBM Db2]])を開発することを後押しした。
[[ラリー・エリソン]]の[[Oracle Database]](以下、Oracle)は、IBMのSystem Rに関する論文を基に、別の系統から出発した。Oracle V1の実装は1978年に完了したが、エリソンが1979年にIBMを打ち負かしたのはOracle Version 2を市場に投入してからであった<ref>{{cite web|url=https://www.oracle.com/us/corporate/profit/p27anniv-timeline-151918.pdf |title=Oracle 30th Anniversary Timeline |access-date=23 August 2017}}</ref>。
スウェーデンでもコッドの論文は読まれ、1970年代半ばに[[ウプサラ大学]]で{{Ill2|Mimer SQL|en|Mimer SQL}}が開発された。1984年、このプロジェクトは独立した企業に統合された。
1976年に登場した[[実体関連モデル|実体関係モデル]]は、それまでのリレーショナルモデルよりも馴染みのある記述法を重視したもう一つのデータモデルであり、[[データベース設計]]で人気を博した。その後、実体-関係構造は、リレーショナルモデルの[[データモデリング]]構造として追加され、両者の違いは無意味なものとなった{{Citation needed|date=March 2013}}。
=== 1980年代、デスクトップ ===
1980年代は、[[デスクトップコンピュータ|デスクトップコンピューティング]]の時代の到来を告げた。新しいコンピュータは、[[Lotus 1-2-3]]のような表計算ソフトや[[dBASE]]のようなデータベースソフトで、ユーザーに力をもたらした。dBASE製品は軽量で、コンピューターユーザーは誰でも容易に理解できた。dBASEの作者、{{Ill2|ウェイン・ラトリフ|en|Wayne Ratliff}}は次のように述べている。「dBASEは、BASIC、C、FORTRAN、COBOLのような[[プログラム (コンピュータ)|プログラム]]とは異なり、多くの汚い仕事はすでに行われている。データ操作はユーザーではなくdBASEが行うので、ユーザーはファイルを開き、読み込み、閉じ、スペース割り当ての管理などの汚い詳細に煩わされることなく、自分のしていることに集中することができる」<ref>[http://www.foxprohistory.org/interview_wayne_ratliff.htm Interview with Wayne Ratliff]. The FoxPro History. Retrieved on 2013-07-12.</ref>。dBASEは、1980年代から1990年代初頭にかけて、最も売れたソフトウェアの一つであった。
=== 1990年代、オブジェクト指向 ===
1990年代は、[[オブジェクト指向プログラミング]]の台頭とともに、さまざまなデータベース内のデータの扱い方で発展が見られた。プログラマーと設計者は、データベース内のデータを[[オブジェクト (プログラミング)|オブジェクト]]として扱うようになった。つまり、ある個人のデータがデータベース内にある場合、その人の住所、電話番号、年齢などの特性は外来のデータではなく、その人に属するものと考えられるようになった<ref>Development of an object-oriented DBMS; Portland, Oregon, United States; Pages: 472–482; 1986; {{ISBN2|0-89791-204-7}}</ref>。これにより、データ間の関係は、個々のフィールドではなく、オブジェクトとその[[プロパティ (プログラミング)|属性]]に関連付けられる。プログラムされたオブジェクトとデータベースのテーブルとの間の変換の不都合は、「[[オブジェクト-リレーショナル・インピーダンスミスマッチ]]」という言葉で表わされる。[[オブジェクトデータベース|オブジェクト・データベース]]や[[オブジェクトリレーショナルデータベース|オブジェクト・リレーショナルデータベース]]は、この問題を解決するために、プログラマーが純粋なリレーショナルSQLの代わりに使用できるオブジェクト指向言語(SQLの拡張機能という場合もある)を提供しようとするものである。プログラミング側の立場では、[[オブジェクトリレーショナル関係マッピング|オブジェクト・リレーショナル・マッピング]](ORM)と呼ばれるライブラリで、同じ問題を解決しようとしている
=== 2000年代、NoSQLとNewSQL ===
{{Main|NoSQL|NewSQL}}
[[XMLデータベース]]は、構造化されたドキュメント指向データベースの一種で、[[Extensible Markup Language|XML文書]]の属性に基づいたクエリが可能である。XMLデータベースは、たとえば科学論文、特許、税務申告、人事記録など、非常に柔軟なものから非常に厳格なものまで、データをさまざまな構造を持つ文書の集合として見るのに便利なアプリケーションで主に使用される。
[[NoSQL]]データベースは、多くの場合、非常に高速で、固定化したテーブルスキーマを必要とせず、{{Ill2|非正規化|en|Denormalization}}したデータを格納することで結合操作を回避し、[[スケーラビリティ#スケールアップとスケールアウト|水平スケーリング]]するように設計されている。
== 分類 ==
データベースを分類する方法として、たとえば、{{Ill2|文献データベース|en|Bibliographic database|label=書誌}}、文書、テキスト、統計、マルチメディアなど、その内容の種類によるものがある。第二の方法は、会計、作曲、映画、銀行、製造、保険など、応用面による分類がある。第三の方法は、データベースの構造や[[インタフェース (情報技術)|インターフェース]]の種類など、技術的な側面によるものである。この節では、さまざまな種類のデータベースを特徴付けるために使用される用語をいくつか列挙する。
* [[インメモリデータベース]]とは、主に[[メインメモリー|メインメモリ]]内に存在するデータベースで、一般的に不揮発性のコンピューターデータストレージによってバックアップされる。メインメモリーデータベースはディスクデータベースよりも高速であるため、通信ネットワーク機器など、応答時間が重要な場合に使用されることが多い。
* {{Ill2|アクティブデータベース|en|Active database}}は、データベース内外の両方の状況に応答できる[[イベント駆動]]型[[アーキテクチャ]]を備えている。セキュリティ監視、アラート、統計収集、および承認などの用途が考えられる。多くのデータベースは、[[データベーストリガ|データベーストリガー]]という形でアクティブデータベースの機能を提供する。
* {{Ill2|空間データベース|en|Spatial database}}は、多次元的な特徴を持つデータを格納することができる。このようなデータに対するクエリには、たとえば「私のいる地域で最も近いホテルはどこですか?」というような、位置に基づくクエリが含まれる。
* {{Ill2|時間データベース|en|Temporal database}}は、時間データモデルや時間バージョンの[[SQL]]など、時間的な側面が組み込まれている。より具体的には、通常、時間的側面には有効時間とトランザクション時間が含まれる。
* {{Ill2|用語指向データベース|en|Terminology-oriented database}}は、[[オブジェクト指向データベース]]に基づいて構築され、多くの場合、特定の分野向けにカスタマイズされている。
* 非構造化データデータベースは、一般的なデータベースに自然かつ簡単に適合しない多様なオブジェクトを、管理可能かつ保護された方法で格納することを目的としている。これには、電子メールメッセージ、文書、雑誌、マルチメディアオブジェクトなどが含まれることがある。オブジェクトの中には高度に構造化されたものもあるため、この名称は誤解を招く可能性がある。しかし、可能性のあるオブジェクトの集合全体が、あらかじめ定義された構造化フレームワークに適合するものではない。現在、ほとんどの既製のDBMSは、さまざまな方法で非構造化データをサポートしており、新しい専用DBMSも登場している。 <!-- (英語版記事のコメントの翻訳) これは文書指向のデータベースではないか? 違うなら明確に区別して欲しい。 -->
ConnollyとBeggは、データベース管理システム(DBMS)を「ユーザーがデータベースを定義、作成、保守、およびアクセスを制御できるようにするソフトウェアシステム」と定義している{{sfn|Connolly|Begg|2014|p=64}}。DBMSの例として、[[MySQL]]、[[PostgreSQL]]、[[Microsoft SQL Server]]、[[Oracle Database]]、[[Microsoft Access]]があげられる。
DBMSの頭文字は、基盤となる[[データベースモデル]]を示して拡張されることがあり、[[リレーショナルモデル|リレーショナル型]]はRDBMS、{{Ill2|オブジェクトモデル|en|Object model|label=オブジェクト(指向)型}}はOODBMS、[[オブジェクトリレーショナルデータベース|オブジェクトリレーショナル型]]はORDBMSと呼ばれる。また、[[分散型データベース|分散型データベース管理システム]]を表すDDBMSなど、他の特性を表すように拡張することができる。
DBMSが提供する機能は非常に多様である。中心的な機能は、データの保存、検索、更新である。コッドは、本格的な汎用DBMSが提供すべき機能およびサービスとして、次のようなものを提案した{{sfn|Connolly|Begg|2014|pp=97–102}}。
* 遠隔地からのアクセスサポート
* データベース内のデータが特定の規則に従うことを保証するための制約の適用
また、DBMS は、インポート、エクスポート、監視、デフラグメント、分析ユーティリティなど、データベースを効果的に管理するために必要な一連のユーティリティを提供することも、一般に期待されている{{sfn|Connolly|Begg|2014|p=102}}。データベースと[[アプリケーション・プログラミング・インタフェース|アプリケーション・インタフェース]]の間で相互作用するDBMSの中心部分は、[[データベースエンジン|データベース・エンジン]]と呼ばれることもある。
多くのDBMSは、データベースが使用できるサーバ上のメインメモリの最大量など、静的または動的に調整可能な構成パラメータを持っている。手動構成する量を最小限に抑える傾向があり、{{Ill2|組み込みデータベース|en|Embedded database}}のような場合は、ゼロ管理を目標とする要求が最も重要である。
大規模なエンタープライズDBMSでは、サイズや機能が増大する傾向があり、その生涯を通じて数千人年の開発努力が費やされることがある{{efn|<!--This article quotes a development time of 5 years involving 750 people for DB2 release 9 alone.-->この記事では、DB2リリース9単独で750人が関与した5年間の開発期間を引用している。{{harv|Chong|Wang|Dang|Snow|2007}}}}。
初期のマルチユーザーDBMSでは、一般的に、アプリケーションを同じコンピュータ上で動作させ、[[コンピュータ端末]]または端末エミュレーションソフトウェアを通じてアクセスすることしかできなかった。[[クライアントサーバモデル|クライアント・サーバー・アーキテクチャ]]は、アプリケーションはクライアントのデスクトップ上にあり、サーバー上に存在するデータベースが処理を分散できるように開発された。これが進化して、[[アプリケーションサーバ|アプリケーションサーバー]]や[[ウェブWebサーバー]]を組み込んだ[[多層アーキテクチャ]]となり、エンドユーザーインターフェイスは[[ウェブブラウザー]]を介してアクセスし、データベースは隣接する層に直接接続されるのみとなった{{sfn|Connolly|Begg|2014|pp=106–113}}。
汎用DBMSは、公開の[[アプリケーション・プログラミング・インタフェース]](API)と、オプションで[[SQL]]などの[[データベース言語]]用のプロセッサを提供して、データベースと対話し操作するアプリケーションを作成できるようにする。特殊用途のDBMSは、プライベートなAPIを使用し、特別にカスタマイズして単一のアプリケーションにリンクされることがある。たとえば、[[電子メール]]システムは、メッセージの挿入、削除、添付ファイルの処理、ブロックリストの検索、メッセージと電子メールアドレスの関連付けなど、汎用DBMSの機能の多くを実行するが、これらの機能は電子メールの処理に必要なものに限定されている。
== アプリケーション ==
データベースとの外部相互作用は、DBMSと接続するアプリケーション・プログラムを介して行われる{{sfn|Connolly|Begg|2014|p=65}}。アプリケーションは、ユーザーが文字的または視覚的にSQLクエリを実行できる[[データベース管理ツールの比較|データベースツール]]から、情報を格納し検索するためにデータベースを使用するWebサイトまで、多岐にわたる。
=== アプリケーション・プログラム・インタフェース(API) ===
[[プログラマー]]は、[[アプリケーション・プログラミング・インタフェース]](API)または[[データベース言語]]を介して、データベース({{Ill2|データソース|en|Datasource}}と呼ばれることもある)との相互対話を[[コーディング]]する。選択された特定のAPIや言語は、DBMSによって直接的にサポートされるか、または[[プリプロセッサ]]またはブリッジングAPIを介して間接的にサポートされる必要がある。APIの中にはデータベースに依存しないことを目的とするものもあり、[[ODBC]]はそのよく知られた例である。その他の一般的なAPIには、[[JDBC]]や[[ADO.NET]]がある。
== データベース言語 ==
* クエリ結果を変更するための計算。たとえば、カウント、合計、平均、並び替え、グループ化、クロスリファレンス。
* 制約の適用(例: 自動車データベースでは、1台の車ごとに1種類のエンジンのみ許可される)。
* プログラマーの便宜のために、クエリ言語のアプリケーション・プログラミング・インターフェース版。
== ストレージ ==
{{Main|[[記憶装置]]<!--Computer data storage-->|[[データベースエンジン]]<!--Database engine-->}}
データベースストレージは、データベースの物理的な実体の格納庫である。これは、データベースアーキテクチャの「''内部(物理)レベル''」を構成する。また、必要に応じて「内部レベル」から「概念レベル」や「外部レベル」を再構築するために必要なすべての情報(たとえば[[メタデータ]]、「データに関するデータ」、内部[[データ構造]]など)も含んでいる。デジタル・オブジェクトとしてのデータベースには、データ、構造、セマンティクス(意味)の3つの層からなる情報が含まれ、保存する必要がある。長期間に渡って[[データベース保存|データベースを保存]]し、長持ちさせるために、3つの層すべてを適切に保存する必要がある<ref>{{Cite journal |author=Ramalho, José Carlos |author2=Faria, Luis |author3=Silva, Hélder |author4=Coutada, Miguel |title=Database Preservation Toolkit: a flexible tool to normalize and give access to databases |year=2014 |publisher=Biblioteca Nacional de Portugal (BNP) |ISBN=978-972-565-541-2 |hdl=1822/35183 |url=https://repositorium.sdum.uminho.pt/handle/1822/35183}}</ref>。データを永続的ストレージに保存するのは、一般に、[[データベースエンジン]](別名「ストレージエンジン」)の責任である。DBMSは通常、基盤となるオペレーティングシステムを通じてアクセスするが(多くの場合、オペレーティングシステムのファイルシステムを、ストレージ配置の仲介役として使用する)、ストレージの特性と構成設定はDBMSの効率的な運用に極めて重要であるため、データベース管理者によって密接に管理される。DBMSは、その運用中に、常に数種類のストレージ(メモリや外部ストレージ)にデータベースを常駐させている。データベースのデータと、追加の必要な情報(おそらく非常に大量にある)は、[[ビット|ビット列]]に[[符号化]]される。データは通常、概念レベルや外部レベルでの見え方とは全く異なる構造でストレージ内に存在するが、ユーザーやプログラムが必要とするとき、または必要な情報の追加形式をデータから計算するとき(例: データベースに問い合わせる時)、これらのレベルの再構築を(可能な限り)最適化するような方法で格納される。
DBMSの中には、データの格納に用いる[[文字エンコーディング]]を指定できるものがあり、同じデータベースで複数のエンコーディングを使用することができる。
{{ill2|データベースセキュリティ|en|Database security|label=データベース・セキュリティ}}は、データベースの内容、その所有者、およびそのユーザーを保護するためのあらゆる側面を扱う。その範囲は、意図的な不正なデータベースの使用から、権限のないエンティティ(たとえば、人やコンピュータプログラムなど)による意図しないデータベースへのアクセスまで、さまざまな保護に及ぶ。
データベースアクセス制御は、データベース内のどの情報に誰が(人間または特定のコンピュータプログラム)アクセスを許可されるかを制御することを扱う。その情報には、特定のデータベースオブジェクト(例: レコード種類、特定レコード、データ構造)、特定のオブジェクトに対する特定の計算(例: クエリ種類、特定のクエリ)、または前者に対する特定のアクセス経路の使用(例: 情報にアクセスするために特定のインデックスまたは他のデータ構造の使用)が含まれる。データベースのアクセス制御は、データベース所有者から特別に許可された人員によって、保護された専用のセキュリティDBMSインターフェースを用いて設定される。
アクセス制御の管理は、個人別に直接行うことも、個人と{{Ill2|特権 (コンピュータ)|en|Privilege (computing)|label=特権}}をグループに割り当てることも、(最も精巧なモデルでは)個人やグループにロール(役割)を割り当ててからロールに権限を付与することもできる。データセキュリティは、権限のないユーザーによるデータベースの閲覧や更新を阻止する。パスワードを使用すると、ユーザーはデータベース全体、または「サブスキーマ」と呼ばれる一部分へのアクセスを許可される。たとえば、従業員データベースには個々の従業員に関するすべてのデータを含めていても、あるグループのユーザーには給与データのみの閲覧を許可し、別のグループには職歴と医療データのみアクセスを許可することが可能である。DBMSがデータベースの入力、更新、問い合わせを対話的に行う方法を提供している場合、この機能によって個人データベースを管理することができる。
アプリケーションのデータベースを設計したら、次の段階はデータベースの構築である。通常、この用途で用いるために、適切な汎用DBMSを選択することができる。DBMSは、データベース管理者が必要なアプリケーションのデータ構造をDBMSの各データモデルに準じて定義するために必要な[[ユーザインタフェース|ユーザーインタフェース]]を提供する。その他のユーザーインタフェースは、必要なDBMSパラメータ(セキュリティ関連、ストレージ割り当てパラメータなど)を選択するために用いられる。
データベースの準備が整うと(データ構造およびその他の必要なコンポーネントがすべて定義される)、通常は、運用を開始する前にアプリケーションの初期データを入力する(データベースの初期化は、通常は別プロジェクトとされ、多くの場合、一括挿入をサポートする専用のDBMSインターフェースを用いる)。場合によっては、アプリケーションのデータを持たない状態でデータベースが稼働し、その運用を経てデータが蓄積されることもある。
データベースを作成し、初期化し、データを入力した後は、データベースを維持する必要がある。たとえば、より良い性能を得るために、さまざまなデータベース・パラメータを変更し、データベースを{{ill2|データベースチューニング|en|Database tuning|label=チューニング}}する必要があるかもしれない。あるいは、アプリケーションの機能を追加するために、アプリケーションのデータ構造を変更または追加し、新しい関連アプリケーションプログラムを作成するかもしれない。
{{Main|[[データベース設計]]<!--Database design-->}}
[[File:Process of database design v2.png|upright=2|thumb|データベース設計の過程を示す流れ図。1.まずビジネス上の用途や知識から概念データモデルを作成し、2.次にデータベース内のデータ構造を反映した論理データモデルを作成し、3.最後に特定のRDBMSに依存した決定に基づく物理データベースを作成する。]]
データベース設計者の最初の作業は[[概念スキーマ (データベース)|概念データモデル]]{{Enlink|Conceptual schema|英語版|en}}の作成で、データベースに保持する情報の構造を反映する。そのための一般的な方法は、描画ツールを用いて[[実体関連モデル]]を作成することが多い。[[統一モデリング言語]](UML)の使用は、もう一つのよく知られた方法である。出来のよいデータモデルは、モデル化される外界の可能な状態を正確に反映する。たとえば、人々が複数の電話番号を持つことができる場合、その情報を取得することが可能となる。優れた概念データモデルを設計するには、アプリケーションの領域を十分に理解する必要がある。それには、一般的に、組織が関心を持っていることについて深い問いを立てる必要がある。たとえば「顧客は発注先にもなり得るのか?」、あるいは「ある製品が2種類の包装形態で販売されている場合、それらは同じ製品か、それとも異なる製品なのか?」、あるいは「飛行機がニューヨークからフランクフルト経由でドバイまで飛ぶ場合、それは1便か2便か(または3便か)?」のような質問をする。これらの質問に対する回答によって、エンティティ(顧客、製品、フライト、フライト区間)に使用される用語の定義、およびそれらの関係や属性を確立する。
概念データモデルを作成する過程で、[[ビジネスプロセスモデリング|ビジネスプロセス]]からの入力や、組織内の[[ワークフロー]]分析からの入力が必要な場合がある。これによって、データベースにどのような情報が必要で、何を省略できるかを特定することができる。たとえば、データベースに現在のデータだけでなく、過去の履歴データも保持する必要があるかどうかを決定するのに役立つ。
汎用データベースで最も普及しているデータベースモデルはリレーショナルモデル、より正確には、SQL言語で表現されるリレーショナルモデルである。このモデルを用いて論理データベースを設計する過程では、[[データベース正規化|正規化]]と呼ばれる系統的アプローチが用いられる。正規化の目的は、挿入、更新、削除の一貫性を自然に維持することで、おのおのの基本的「事実」を一箇所にのみ記録することでなされる。
データベース設計の最終段階では、特定のDBMSに依存する性能、スケーラビリティ、回復、セキュリティなどに影響する決定をする。これはしばしば「物理データベース設計」と呼ばれ、[[物理スキーマ (データベース)|物理データモデル]]を作成する。この段階での重要な目標は{{Ill2|データの独立性|en|Data independence}}である。これは、性能を最適化するために行われた決定を、エンドユーザーやアプリケーションから見えないようにすることを意味する。データの独立性には2つのタイプがあり、物理的なデータ独立性と論理的なデータ独立性である。物理設計は主に性能要件によって推進され、予想される作業負荷とアクセスパターンに関する十分な知識と、選択したDBMSが持つ機能についての深い理解を必要とする。
物理データベース設計のもうひとつの側面はセキュリティである。これには、データベースオブジェクトへの[[アクセス制御]]を定義することと、データ自体のセキュリティレベルとメソッド(手順)の定義の両方を含んでいる。
[[File:Database models.jpg|thumb|upright=2|5種類のデータベースモデルを切り貼りした図。]]
[[データベースモデル]]とは、データベースの論理構造を決定するデータモデルの一種で、[[データ (コンピュータ)|データ]]をどのように格納、整理、操作するかの根本を規定するものである。データベースモデルの最も一般的な例は、テーブルベースの形式を使用するリレーショナルモデル(またはリレーションを近似したSQL)<!-- the SQL approximation of relational -->である。
データベースの一般的な論理データモデルを次にあげる。
データの概念ビュー(または論理ビュー)および物理ビュー(または内部ビュー)は、通常、1つしかないが、さまざまな外部ビューはいくつでも存在することができる。これにより、ユーザーは、技術的あるいは処理的な視点からではなく、よりビジネスに関連した視点からデータベース情報を見ることができるようになる。たとえば、企業の[[経営財務|財務]]部門は会社の経費の一部として全従業員の支払明細を必要とするが、[[ヒューマンリソース|人事]]部門の関心事である従業員に関する明細は必要ない。このように、部門によって、企業データベースには異なるビューが必要となる。
三層データベース・アーキテクチャは、リレーショナルモデルの主要な初期推進力の1つであった{{Ill2|データの独立性|en|Data independence}}の概念に関連している。この考え方は、あるレベルで行われた変更は、より高いレベルのビューに影響を与えないというものである。たとえば、内部レベルの変更は、概念レベルのインターフェースを使用して記述されたアプリケーションプログラムには影響しないので、性能を向上させるために物理的変更を加えてもその影響を軽減することができる。
概念ビューは、内部ビューと外部ビューの間に間接的なレベルを提供する。一方では、異なる外部ビュー構造に依存しないデータベースの共通ビューを提供し、また他方では、データがどのように格納され管理されるかという詳細(内部レベル)を抽象化する。原則として、すべてのレベルの、さらにはすべての外部ビューは、異なる[[データモデル]]で表現することができる。実際には通常、特定のDBMSは外部レベルと概念レベルの両方で同じデータモデルを使用する(例: リレーショナルモデル)。内部レベルは特定のDBMSの内側に隠されており、(その実装にも依存するが)異なるレベルの詳細が要求され、独自の種類のデータ構造型が用いられる。
外部、概念、および内部レベルを分離することは、[[21世紀]]のデータベースを支配するリレーショナルデータベースモデルの実装における大きな特徴であった{{sfn|Date|2003|pages=31–32}}。
== 研究 ==
|