「データベース」の版間の差分
編集の要約なし |
Baudanbau20 (会話 | 投稿記録) m リンク先とリンク文が同一 |
||
(4人の利用者による、間の4版が非表示) | |||
1行目: | 1行目: | ||
{{about|コンピューティング的な概念<!--the computing concept-->|データベースの実例<!--instances of the general concept-->|{{ill2|データベースの一覧|en|Lists of databases}}|データベースの概要およびトピックガイド|{{ill2|データベースの概要|en|Outline of databases}}}} |
|||
{{WikipediaPage|データベースの利用|Wikipedia:データベースダウンロード}} |
{{WikipediaPage|データベースの利用|Wikipedia:データベースダウンロード}} |
||
'''データベース'''({{lang-en-short|database, DB}})とは、[[検索]]や蓄積が容易にできるよう整理された情報の集まり。実装方法は限定せずにファイルキャビネットを使ったローテクによるものから情報技術を使ったハイテクなものまで全て含む。 |
|||
[[Image:DVD Rental Query.png|thumb|SQL言語の[[SELECT (SQL)|SELECT文]]とその実行結果を示す|upright=1.35]] |
|||
ただし、通常は[[コンピュータ]]によって実現されたものを指す。コンピュータを使用したデータベース・システムでは、データベース管理用の[[ソフトウェア]]である[[データベース管理システム]]を使用する場合も多い。独自にデータを蓄積・管理する場合と比較して、プログラムで扱うデータ構造やデータそのものを統一された手続きと少ない工数で操作できるため、膨大なデータを扱う企業において、データ活用の中心を支える技術となっている<ref>{{Cite web |title=企業のデータ活用の中心であるデータベースの進化とその広がり|Masaya.Mori 森正弥 / AI Institute 所長|note |url=https://note.com/masayamori/n/nc23283f2f92e |website=note(ノート) |access-date=2022-08-08 |language=ja}}</ref>。 |
|||
[[コンピューティング]]において、'''データベース'''({{Lang-en-short|database}})は、電子的に保存され、アクセスできる組織化された[[データ]]の集合である。小規模なデータベースは[[ファイルシステム]]上に保存されるが、大規模なデータベースは[[コンピュータ・クラスター]]または{{Ill2|クラウド・ストレージ|en|Cloud storage}}で保存される。[[データベース設計]]に関わる分野は多岐にわたり、{{Ill2|データ・モデリング|en|Data modeling}}、効率的なデータ表現と保存、[[問い合わせ言語|クエリ言語]]、機密データの{{Ill2|データベース・セキュリティ|en|Database security|label=セキュリティ}}や[[情報プライバシー|プライバシー]]、[[並行計算|同時アクセス]]と[[フォールトトレランス]]のサポートを含む[[分散コンピューティング]]の課題など、形式技術と実用的な考慮事項に及ぶ。 |
|||
== 例 == |
|||
たとえば次のようなものが挙げられる。 |
|||
'''[[データベース管理システム]]'''('''DBMS''')は、[[エンドユーザー]]、アプリケーション、およびデータベース自体と対話し、データを取得し分析するための[[ソフトウェア]]である。さらに、DBMSソフトウェアには、データベースを管理するために提供される関連機能も含まれている。データベース、DBMS、関連アプリケーションの全体を含めて'''データベースシステム'''と呼ぶ。しばしば「データベース」という用語が、DBMS、データベースシステム、またはデータベースに関連するアプリケーションのいずれかを指す場合に漠然と使われている。 |
|||
* [[住民基本台帳]] |
|||
* [[銀行のオンラインシステム|銀行の口座情報]] |
|||
* 顧客情報ファイル(CIF) |
|||
* [[ディレクトリ・サービス|認証サーバ]]におけるアカウント情報(IDとパスワード) |
|||
* [[検索エンジン]] |
|||
* [[電子カルテ]] |
|||
* [[CDDB|音楽データベース]] |
|||
* [[化学データベース]] |
|||
* [[OPAC]] |
|||
* [[IPDL]] |
|||
* [[棋譜]]データベース<ref>{{Cite web |url=https://shogidb2.com/ |title=無料の棋譜サービス |publisher=将棋DB2 |accessdate=2017-12-23}}</ref> |
|||
* [[電子国土基本図]] |
|||
コンピュータ科学者は、データベース管理システムを、サポートする[[データベースモデル]]に基づいて分類している。[[リレーショナルデータベース]]は、1980年代の主流であった。これらは、データを一連の[[表 (データベース)|表]]の[[行 (データベース)|行]]と[[列 (データベース)|列]]としてモデル化し、大多数はデータの書き込みとクエリ(問い合わせ)に[[SQL]]を使用する。2000年代には、異なる[[問い合わせ言語|クエリ言語]]を使用する [[NoSQL]] と総称される非リレーショナルデータベースが普及した。 |
|||
など |
|||
== |
== 用語と概要 == |
||
形式的な「''データベース''」は、関連するデータの集合とその編成方法を指す。通常、このデータへのアクセスは、「''データベース管理システム''」(''DBMS'')によって提供される。DBMSは、[[ユーザー (コンピュータ)|ユーザー]]が1つまたは複数のデータベースと対話し、データベースに含まれるすべてのデータへのアクセスを提供するコンピュータソフトウェアの統合セットで構成されている(ただし、特定のデータへのアクセスを制限する制約が存在することもある)。DBMSは、大量の情報の入力、保存、および検索を可能にするさまざまな機能を提供し、その情報がどのように編成されているかを管理する方法を提供する。 |
|||
{{データベースモデル}} |
|||
[[Image:Emp Tables (Database).PNG|right]] |
|||
このように、両者は密接な関係にあるため、「データベース」という用語は、データの集まりとしてのデータベースと、それを操作するために用いるDBMSの両方を指す言葉として気軽に使われることが多い。 |
|||
[[データモデル]]とは、データベースに格納するデータをどのように配置するかを論理的・物理的な側面から規定するものである。 |
|||
[[情報技術]]の専門家以外の世界では、「データベース」という用語は、関連するデータの集合体(例: [[スプレッドシート]]や[[情報カード|カードインデックス]]など)を指すことが多く、サイズや使用要件の点からデータベース管理システムを用いることが一般的である{{sfn|Ullman|Widom|1997|p=1}}。 |
|||
=== 例 === |
|||
データモデルの例は以下に示す通りである。 |
|||
既存のDBMSは、データベースとそのデータを管理するためのさまざまなな機能を提供しており、それらは次の4つの主要な機能群に分類される。 |
|||
* [[階層型データモデル]](ハイアラキカル・データモデル) |
|||
* [[ネットワーク型データモデル]] |
|||
* [[関係モデル|リレーショナルデータモデル]] ([[関係モデル]]、[[関係データベース]]) |
|||
* [[オブジェクト指向|オブジェクトデータモデル]] ([[オブジェクト指向]]、[[オブジェクトデータベース]]) |
|||
* [[カード型データモデル]] |
|||
* '''データ定義'''(''Data definition'')- データの編成を規定する定義を作成、変更、および削除する。 |
|||
[[1960年代]]から70年代にかけては階層型データモデルやネットワーク型データモデルが主流であったが、[[関係モデル|リレーショナルデータモデル]]が[[エドガー・F・コッド]]によって考案されてからは、それが最も広く普及している。 |
|||
* '''更新'''(''Update'')- 実データを挿入、変更、および削除する<ref>{{cite web |url=http://www.merriam-webster.com/dictionary/update |title=Update – Definition of update by Merriam-Webster |work=merriam-webster.com |access-date=2022-08-14}}</ref>。 |
|||
* '''検索'''(''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}}。 |
|||
=== リレーショナルデータモデル === |
|||
[[IBM]]の[[エドガー・F・コッド]]によって考案された<ref>Derivability, Redundancy and Consistency of Relations Stored in Large Data Banks. IBM Research Report, San Jose, California RJ599: (1969)</ref>現在、最も広く用いられている[[データモデル]]である。数学の[[集合論]]に基づき、複数の[[関係 (データベース)|関係(リレーション)]]を基本的なデータ型とする。 |
|||
DBMSは重要な{{Ill2|市場 (経済学)|en|Market (economics)|label=市場}}を形成しているため、コンピューターやストレージのベンダーは、自社の開発計画にDBMSの要件を考慮に入れていることが多い{{sfn|Nelson|Nelson|2001}}。 |
|||
格納されたデータを獲得するための問い合わせは[[関係代数 (関係モデル)|関係代数]]ないし[[関係論理]]の演算によって行う。 |
|||
データベースとDBMSは、サポートするデータベースモデル(リレーショナルやXMLなど)、実行するコンピュータの種類(サーバークラスタから携帯電話まで)、データベースへのアクセスに使用するクエリ言語(SQLや[[XQuery]]など)、内部エンジニアリング(性能、[[スケーラビリティ]]、障害許容力、およびセキュリティに影響する)によって分類することができる。 |
|||
{{main2|リレーショナルデータモデルに関する詳細は[[関係モデル]]と[[関係データベース]]を}} |
|||
== |
== 歴史 == |
||
データベースとそれぞれのDBMSの規模、機能、性能は桁違いに大きくなっている。これらの性能向上は、[[中央処理装置|プロセッサ]]、[[コンピュータメモリ]]、[[コンピュータデータストレージ|コンピュータストレージ]]、および[[コンピュータネットワーク]]の技術進歩により可能となった。データベースの概念は、1960年代半ばに広く普及した磁気ディスクなどの[[直接アクセス記憶装置|直接アクセス記憶媒体]]の出現によって可能となった。それ以前のシステムは、[[磁気テープ]]へのデータの順次保存に依っていた。その後のデータベース技術の発展は、データモデルまたは[[データ構造]]に基づいて、[[ナビゲーショナルデータベース|ナビゲーショナル]]{{sfn|Bachman|1973}}、SQL/[[リレーショナルデータベース|リレーショナル]]、ポストリレーショナルの3つの時代に分けることができる。 |
|||
日本の[[著作権法]]におけるデータベースは、次の通り定義される。 |
|||
{{quotation| |
|||
「論文、数値、図形その他の情報の集合物であつて、それらの情報を電子計算機を用いて検索することができるように体系的に構成したもの」|([[s:著作権法#a2|著作権法第二条の十の三]])}} |
|||
初期のナビゲーショナル・データモデルは、[[階層型データモデル|階層型モデル]]と[[ネットワーク型データモデル|ネットワーク型モデル]]([[CODASYL]]モデル)の2つが主であった。これらは、あるレコードから別のレコードへの関係を追跡するために、[[ポインタ (プログラミング)|ポインタ]](多くの場合、物理的なディスクアドレス)を使用することが特徴であった。 |
|||
その[[著作物]]としての権利は、次の通り定められている。 |
|||
{{quotation| |
|||
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}}。 |
|||
「データベースで情報の選択又は体系的な構成によって創作性を有するものは、著作物として保護されている」|([[s:著作権法#a12.2|著作権法第十二条の二]])}} |
|||
[[オブジェクトデータベース]]は、[[オブジェクト指向]]とリレーショナル型との[[インピーダンスミスマッチ]](相性の欠如)による不便さを解消するために1980年代に開発され、これにより「ポストリレーショナル(''post-relational'')」という言葉が生まれ、また、ハイブリッド型の[[オブジェクトリレーショナルデータベース|オブジェクト・リレーショナルデータベース]]も開発された。 |
|||
2000年代後半に登場した、次世代のポスト・リレーショナルデータベースは、高速な[[キーバリュー型データベース|キーバリュー型ストア]]や{{仮リンク|ドキュメント指向データベース|en|Document-oriented database}}を導入し、[[NoSQL]]データベースと呼ばれるようになった。これと競合する[[NewSQL]]と呼ばれる次世代データベースは、リレーショナル/SQLモデルを維持しつつ、市販のリレーショナルDBMSと比較してNoSQLの高い性能に見合うような新しい実装を試みている。 |
|||
=== 1960年代、ナビゲーショナルDBMS === |
|||
{{Further|[[ナビゲーショナルデータベース|ナビゲーショナル・データベース]]}} |
|||
[[File:CodasylB.png|thumb|upright=1.15|ナビゲーショナル・データベースモデル(例: [[CODASYL]])の基本構造であるレコードセットの閉じた連鎖を示す。レコードセットは、「オーナー」とも呼ばれる1つの親レコードと、「メンバーレコード」とも呼ばれるn個の子レコードから構成される。各レコードのキーによって正方向ポインタ、逆方向ポインタ、直接ポインタが提供される。]] |
|||
データベースという言葉が登場したのは、1960年代半ば以降に、[[直接アクセス記憶装置|直接アクセスストレージ]](ディスクやドラム)が利用できるようになった時期と重なる。この用語は、過去のテープベースのシステムとは対照的に、日常の[[バッチ処理]]ではなく、対話的な共有での利用を可能にすることを意味した。[[オックスフォード英語辞典]]では、カリフォルニアの{{Ill2|System Development Corporation|en|System Development Corporation}}が1962年に発表した報告書を、特定の技術的な意味で「データベース」という用語を初めて使用したものとして引用している<ref>{{cite web|title=database, n|url=http://www.oed.com/view/Entry/47411|work=OED Online|publisher=Oxford University Press|access-date=July 12, 2013|date=June 2013}} {{subscription required|s}}</ref>。 |
|||
コンピュータの速度と機能が向上するに伴い、多くの汎用データベースシステムが登場し、1960年代半ばには多くのこうしたシステムが商用化されるようになった。標準化への関心が高まり、そうした製品の一つである{{Ill2|Integrated Data Store|en|Integrated Data Store|label=Integrated Data Store(IDS)}}の制作者である[[チャールズ・バックマン]]が、[[COBOL]]の作成と標準化を担当したグループ[[CODASYL]]内にデータベース・タスクグループを設立した。1971年、データベース・タスクグループは、一般に「''CODASYLアプローチ''」として知られるようになった彼らの標準を提供し、まもなくこのアプローチに基づいた多くの商用製品が市場に参入した。 |
|||
CODASYLアプローチ方式は、アプリケーションに対し、大規模ネットワーク内に形成された連結データセット<!-- linked data set -->を移動する機能を提供した。アプリケーションは、3つの方法のうちのいずれかによってレコードを見つけることができる。 |
|||
# 主キーの使用(CALCキーとして知られ、典型的には[[ハッシュ関数|ハッシュ]]によって実装される)。 |
|||
# あるレコードから別のレコードへの関係(セットと呼ばれる)の移動。 |
|||
# すべてのレコードを順番にスキャンする。 |
|||
その後のシステムで、[[B木]](''B-tree'')が追加され、代替アクセス経路を提供するようになった。また、多くのCODASYLデータベースでは、エンドユーザー向けに(ナビゲーション型APIとは異なる)宣言型クエリ言語も追加された。しかし、CODASYLデータベースは複雑で、有用なアプリケーションを作るには多大な訓練と労力を要した。 |
|||
また、[[IBM]]は、1966年に、[[IBM Information Management System|Information Management System]](IMS)として知られる独自のDBMSを持っていた。IMSは、[[アポロ計画]]のために作成されたソフトウェアの[[System/360]]への発展型であった。IMSは一般にCODASYLと概念が似ているが、そのデータナビゲーションのモデルは厳密な階層を使用し、CODASYLのネットワーク型モデルではなかった。どちらの概念も、データへのアクセス方法の観点から、後にナビゲーショナル・データベースと呼ばれるようになった。この用語は、1973年のバックマンの[[チューリング次数|チューリング賞]]の講演「''The Programmer as Navigator''」によって広まった。IBMによって、IMSは[[階層型データベース]]として分類されている。IDMSや{{Ill2|Cincom Systems|en|Cincom Systems}}の[[:en:Cincom Systems#1970s%20and%201980s|TOTALデータベース]]は、[[ネットワーク型データベース]]に分類される。2014年現在、IMSは使用されている<ref>{{cite web|last=IBM Corporation|title=IBM Information Management System (IMS) 13 Transaction and Database Servers delivers high performance and low total cost of ownership|url=http://www-01.ibm.com/common/ssi/cgi-bin/ssialias?subtype=ca&infotype=an&appname=iSource&supplier=897&letternum=ENUS213-381|access-date=Feb 20, 2014|date=October 2013}}</ref>。 |
|||
=== 1970年代、リレーショナルDBMS === |
|||
[[エドガー・F・コッド]]は、[[サンノゼ|カリフォルニア州サンノゼ]]にあるIBMの研究室の1つで、主に[[ハードディスクドライブ|ハードディスク]]システムの開発に携わっていた。彼は、CODASYLアプローチのナビゲーションモデルにおいて、特に「検索(''search'')」機能の欠如に不満を抱いていた。1970年、彼はデータベース構築の新しいアプローチを概説する多くの論文を書き、最終的に画期的な論文「大規模共有データバンクのためのデータのリレーショナルモデル(''A Relational Model of Data for Large Shared Data Banks'')」に結実させた{{sfn|Codd|1970}}。 |
|||
この論文で、彼は大規模なデータベースを保存し、操作するための新しいシステムについて説明した。コッドの考えは、CODASYLのように自由形式のレコードをある種の[[連結リスト]]に格納するのではなく、データをいくつかの「[[表 (データベース)|テーブル]]」(''table''、表)として編成し、それぞれのテーブルを異なる種類のエンティティ(''entity''、実体)に使用することであった。各テーブルは、エンティティの属性を含む固定数の列を含むことになる。各テーブルの1つ以上の列は、テーブルの行を一意に識別するための[[主キー]]として指定され、テーブル間の相互参照には、ディスクアドレスではなく、常にこの主キーが使用された。クエリにおいては、[[関係論理]]の数学的体系に基づく一連の操作を用いて、これらのキー関係に基づいてテーブルを結合する(モデルの名前の由来)。データを正規化された一連のテーブル(または[[関係 (データベース)|関係]](''relation'')、リレーション)に分割することで、各々の「ファクト(''fact''、事実)」を一度だけ保存するようにし、更新操作を簡略化する。ビュー(''view'')と呼ばれる仮想的なテーブルは、ユーザーごとに異なる方法でデータを表示することができるが、ビューを直接更新することはできなかった。 |
|||
コッドは、テーブル、行、列ではなく、関係(relation)、[[組 (データベース)|組]](tuple)、[[定義域 (データベース)|定義域]](domain)という数学用語を使ってモデルを定義した。現在よく知られているこれらの用語は、初期の実装に由来するものである。コッドは後に、実際の実装が、モデルの基礎となった数学的な基礎から逸脱する傾向にあることを批判した。[[File:Relational key SVG.svg|thumb|[[リレーショナルモデル]]では、仮想キーを使ってレコードどうしがリンクされる。仮想キーは、データベースに格納されていないが、必要に応じてレコードに含まれるデータ間で定義される。この図は、login列の値「mark」を仮想キーとしてリンクした2つのレコードを示す。]] |
|||
テーブル間の関係を表すために、ディスクアドレスではなく主キー(ユーザー指向の識別子)を使用したのは、主に2つの動機があった。エンジニアリングの観点からは、費用がかかるデータベースの再編成をすることなく、テーブルの再配置やサイズ変更を可能とした。しかし、コッドは、セマンティクス(意味)の違いにより強い興味を持っていた。明示的な識別子を使用することで、純粋な数学的定義で更新操作を定義することが容易になり、[[一階述語論理]]という確立した学問分野の観点でクエリ操作を定義できるようになった。これらの操作は純粋な数学的性質があるため、クエリ最適化の基礎をなす証明可能な正しい方法でクエリを書き換えることが可能となる。テーブル間の接続は明示的ではなくなったが、階層型モデルやネットワーク型モデルと比較して表現力が損なわれることはない。 |
|||
階層型モデルやネットワーク型モデルでは、レコードが複雑な内部構造を持つことが許容された。たとえば、ある従業員の給与履歴は、従業員レコードの中の「繰り返しグループ」として表わされることがある。リレーショナルモデルでは、正規化の過程によって、そのような内部構造は、論理キーのみで結合された複数のテーブルに保持されたデータで置き換えられた。 |
|||
たとえば、データベースシステムの一般的な使い方として、ユーザーに関する情報、名前、ログイン情報、さまざまな住所や電話番号を突き止めることがあげられる。ナビゲーショナル方式では、これらのデータはすべて1つの可変長レコード内に格納される。リレーショナル方式では、そのデータは(たとえば)ユーザーテーブル、アドレステーブル、電話番号テーブルに「正規化(''normalize'')」される。これらの任意のテーブル内には、実際に住所や電話番号が提供された場合のみ、レコードが作成される。 |
|||
コッドは、(ディスクアドレスではなく)論理的な識別子を使用して行/レコードを識別するだけでなく、アプリケーションが複数のレコードからデータを組み立てる方法も変更した。アプリケーションがリンクを移動して1レコードずつデータを収集することを要求するのではなく、アプリケーションは、宣言型のクエリ言語を使用して(どのようにデータを見つけるかというアクセス経路ではなく)どのようなデータが必要なのかを表現する。データへの効率的なアクセス経路を見つけるのは、アプリケーションの[[プログラマー]]ではなく、データベース管理システムの責任となった。クエリ最適化(''query optimization'')と呼ばれるこの過程は、クエリが数学的論理の観点で表現されているという事実に基づいている。 |
|||
コッドの論文は、[[カリフォルニア大学バークレー校|バークレー校]]の{{Ill2|ユージン・ウォン|en|Eugene Wong}}と[[マイケル・ストーンブレーカー]]の二人によって着目された。彼らは、地理データベースプロジェクトにすでに割り当てられていた資金と、コードを作成する学生プログラマーを使って、[[Ingres|INGRES]]と呼ばれるプロジェクトを開始した。INGRESは、1973年の初頭に最初のテスト製品を提供し、1979年には一般に広く使用されるようになった。INGRESは、{{Ill2|データアクセス|en|Data access}}のための[[QUEL]]と呼ばれる「言語(''language'')」の使用を含め、多くの点で[[System R|IBM System R]]と類似していた。時の経過とともに、INGRESは新しい標準SQLに移行していった。 |
|||
IBM自身は、リレーショナルモデルのテスト実装である{{Ill2|IBM Peterlee Relational Test Vehicle (ソフトウェア)|en|IBM Peterlee Relational Test Vehicle (PRTV)|label=PRTV}}と、製品版である{{Ill2|IBM Business System 12|en|IBM Business System 12|label=Business System 12}}の開発を一度行ったが、いずれも現在は廃止されている。[[ハネウェル|Honeywell]]は、[[Multics]]用の{{Ill2|Multics Relational Data Store|en|Multics Relational Data Store|label=MRDS}}を開発したが、現在では{{Ill2|Dataphor|en|Dataphor|label=Alphora Dataphor}}と{{Ill2|Rel (DBMS)|en|Rel (DBMS)|label=Rel}}の2つの新しい実装が存在する。「リレーショナル」と呼ばれる他のDBMSの実装のほとんどは、実際にはSQL DBMSである。 |
|||
1970年、ミシガン大学は、{{Ill2|デイヴィッド・L・チャイルズ|en|David L. Childs}}の集合論的データモデル<!-- Set-Theoretic Data model -->に基づく{{Ill2|MICRO情報管理システム|en|MICRO Relational Database Management System}}{{sfn|Hershey|Easthope|1972}}の開発を開始した{{sfn|North|2010}}{{sfn|Childs|1968a}}{{sfn|Childs|1968b}}。MICROは、非常に大きなデータセットを管理するために、[[アメリカ合衆国労働省|米国労働省]]、[[アメリカ合衆国環境保護庁|米国環境保護庁]]、[[アルバータ大学]]、[[ミシガン大学]]、[[ウェイン州立大学]]の研究者によって使用された。これは、{{Ill2|ミシガン・ターミナル・システム|en|Michigan Terminal System}}を使用するIBM[[メインフレーム]]コンピューター上で稼働した<ref name="MICROManual1977">{{cite book |author1=M.A. Kahn |author2=D.L. Rumelhart |author3=B.L. Bronson |date=October 1977 |url=https://docs.google.com/viewer?a=v&pid=explorer&chrome=true&srcid=0B4t_NX-QeWDYZGMwOTRmOTItZTg2Zi00YmJkLTg4MTktN2E4MWU0YmZlMjE3 |title=MICRO Information Management System (Version 5.0) Reference Manual |publisher=Institute of Labor and Industrial Relations (ILIR), University of Michigan and Wayne State University}}</ref>。このシステムは1998年まで稼動し続けた。 |
|||
=== 統合型アプローチ === |
|||
{{Main|{{ill2|データベースマシン|en|Database machine}}}} |
|||
1970年代から1980年代にかけ、ハードウェアとソフトウェアを統合したデータベースシステムの構築が試みられた。その根底にある理念は、このような統合が、より高い性能をより低い費用で提供できるというものである。その例として、[[IBM System/38]]、[[Teradata]]の初期の製品、および{{Ill2|Britton Lee, Inc.|en|Britton Lee, Inc.}}のデータベースマシンがあげられる。 |
|||
また、データベース管理をハードウェアでサポートするアプローチには、{{Ill2|International Computers Limited|en|International Computers Limited|label=ICL}}の{{Ill2|Content Addressable File Store|en|Content Addressable File Store|label=CAFS}}アクセラレータという、プログラム可能な検索機能を持つハードウェアディスクコントローラーがあった。しかし、汎用コンピュータの急速な発展と進歩に、データベース専用機が追いつくことができなかったため、長期的にはこれらの取り組みは概して失敗に終わった。こうしたことから、現今のほとんどのデータベースシステムは、汎用ハードウェア上で動作するソフトウェアシステムであり、汎用のコンピュータとデータストレージを使用している。しかし、この着想は今もなお、{{Ill2|Netezza|en|Netezza}}やOracle ({{Ill2|Oracle Exadata|en|Oracle Exadata|label=Exadata}})など一部の企業によって特定の用途で追求されている。 |
|||
=== 1970年代後半、SQL DBMS === |
|||
1970年代前半、IBMは、[[System R|''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>。 |
|||
ストーンブレーカーはその後、INGRESからの教訓を応用して、現在は[[PostgreSQL]]として知られている新しいデータベースPostgresを開発した。PostgreSQLは、大域的で基幹的な業務アプリケーションによく使用されている。(.orgや.infoのドメイン名レジストリでは、多くの大企業や金融機関と同様に、これを主要{{Ill2|データストア|en|Data store}}として使用している)。 |
|||
スウェーデンでもコッドの論文は読まれ、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; {{ISBN|0-89791-204-7}}</ref>。これにより、データ間の関係は、個々のフィールドではなく、オブジェクトとその[[プロパティ (プログラミング)|属性]]に関連付けられる。プログラムされたオブジェクトとデータベースのテーブルとの間の変換の不都合は、「[[オブジェクト-リレーショナル・インピーダンスミスマッチ]]」という言葉で表わされる。[[オブジェクトデータベース|オブジェクト・データベース]]や[[オブジェクトリレーショナルデータベース|オブジェクト・リレーショナルデータベース]]は、この問題を解決するために、プログラマーが純粋なリレーショナルSQLの代わりに使用できるオブジェクト指向言語(SQLの拡張機能という場合もある)を提供しようとするものである。プログラミング側の立場では、[[オブジェクトリレーショナルマッピング|オブジェクト・リレーショナル・マッピング]](ORM)と呼ばれるライブラリで、同じ問題を解決しようとしている |
|||
=== 2000年代、NoSQLとNewSQL === |
|||
{{Main|NoSQL|NewSQL}} |
|||
[[XMLデータベース]]は、構造化されたドキュメント指向データベースの一種で、[[Extensible Markup Language|XML文書]]の属性に基づいたクエリが可能である。XMLデータベースは、たとえば科学論文、特許、税務申告、人事記録など、非常に柔軟なものから非常に厳格なものまで、データをさまざまな構造を持つ文書の集合として見るのに便利なアプリケーションで主に使用される。 |
|||
[[NoSQL]]データベースは、多くの場合、非常に高速で、固定化したテーブルスキーマを必要とせず、{{Ill2|非正規化|en|Denormalization}}したデータを格納することで結合操作を回避し、[[スケーラビリティ#スケールアップとスケールアウト|水平スケーリング]]するように設計されている。 |
|||
近年、高い[[分断耐性]]を備えた大規模分散データベースが強く求められているが、[[CAP定理]]によれば、[[分散システム]]で[[一貫性モデル (ソフトウェア)|一貫性]]、可用性、分断耐性を同時に備えることは不可能とされている。分散システムは、これら3つの保証のうち、いずれか2つを同時に満たすことはできても、3つすべてを満たすことはできない。そのため、多くのNoSQLデータベースでは、データ整合性のレベルを下げて可用性と分断耐性の両方を保証する、[[結果整合性]]という考え方を採用している。 |
|||
最新のリレーショナルデータベースの一種である[[NewSQL]]は、SQLを使用し、また従来のデータベースシステムの[[ACID (コンピュータ科学)|ACID]]保証を維持しながらも、オンライントランザクション処理のワークロード(読み込みと書き込みの両方を伴う)に対して、NoSQLシステムと同じスケーラブルな性能を提供することを目的としている。 |
|||
== 使用例 == |
|||
{{unreferenced section|date=March 2013}} |
|||
データベースは、組織の内部業務を支援し、顧客や発注先とのオンラインでのやり取りを支えるために使用される([[エンタープライズソフトウェア|エンタープライズ・ソフトウェア]]を参照)。 |
|||
データベースは、業務における管理情報、エンジニアリングデータや経済モデルなどのより専門的なデータを保持するためにも使用される。たとえば、コンピュータによる[[図書館]]システム、[[航空座席予約システム]]<ref name="斎藤謙一郎2003">{{Cite journal|和書|journal=電気学会誌|year=2003|title=航空予約システムとその動向|volume=123|page=352|last=斎藤<!--さいとう-->|first=謙一郎<!--けんいちろう-->|issue=6|language=ja|DOI=10.1541/ieejjournal.123.349|ISSN=1881-4190}}</ref>、コンピュータ化された部品[[在庫管理]]システム、および[[ウェブサイト]]をウェブページの集合としてデータベースに保存する多くの[[コンテンツ管理システム]]などがあげられる。 |
|||
== 分類 == |
|||
データベースを分類する方法として、たとえば、{{Ill2|文献データベース|en|Bibliographic database|label=書誌}}、文書、テキスト、統計、マルチメディアなど、その内容の種類によるものがある。第二の方法は、会計、作曲、映画、銀行、製造、保険など、応用面による分類がある。第三の方法は、データベースの構造やインタフェースの種類など、技術的な側面によるものである。この節では、さまざまな種類のデータベースを特徴付けるために使用される用語をいくつか列挙する。 |
|||
* [[インメモリデータベース]]とは、主に[[メインメモリー|メインメモリ]]内に存在するデータベースで、一般的に不揮発性のコンピューターデータストレージによってバックアップされる。メインメモリーデータベースはディスクデータベースよりも高速であるため、通信ネットワーク機器など、応答時間が重要な場合に使用されることが多い。 |
|||
* {{Ill2|アクティブデータベース|en|Active database}}は、データベース内外の両方の状況に応答できる[[イベント駆動]]型[[アーキテクチャ]]を備えている。セキュリティ監視、アラート、統計収集、および承認などの用途が考えられる。多くのデータベースは、[[データベーストリガ|データベーストリガー]]という形でアクティブデータベースの機能を提供する。 |
|||
* {{Ill2|クラウドデータベース|en|Cloud database}}は、[[クラウドコンピューティング|クラウド技術]]に基づいている。データベースとDBMSの大半はいずれも遠く離れた「クラウド」上に存在するが、アプリケーションはプログラマーが開発し、エンドユーザーが[[ウェブブラウザ]]と{{Ill2|オープンAPI|en|Open API}}を通じてデータベースを保守/利用する。 |
|||
* [[データウェアハウス]]は、業務用データベースや、しばしば市場調査会社などの外部ソースから得たデータをアーカイブする。 データウェアハウスは、業務データにアクセスできない管理者やその他のエンドユーザーが使用するデータの中心的な供給源となる。たとえば、販売データを週ごとの合計に集計し、[[エーシーニールセン|ACニールセン]]のデータと比較できるように社内商品コードを[[統一商品コード]](UPC)に変換する。データウェアハウジングの基本的かつ不可欠なコンポーネントには、データの抽出、[[データ分析|分析]]、[[データマイニング|マイニング]]、変換、読み込み、そしてデータをさらに利用できるようにするデータ管理がある。 |
|||
* {{Ill2|演繹データベース|en|Deductive database}}は、[[論理プログラミング]]とリレーショナルデータベースを組み合わせたものである。 |
|||
* [[分散データベース]]とは、データとDBMSの両方が複数のコンピュータにまたがったデータベースのことである。 |
|||
* {{Ill2|ドキュメント指向データベース|en|Document-oriented database}}は、ドキュメント指向または半構造化された情報を格納、取得、および管理するために設計されている。ドキュメント指向データベースは、NoSQLデータベースの主要なカテゴリの一つである。 |
|||
* {{Ill2|組み込みデータベース|en|Embedded database}}システムとは、保存されたデータへのアクセスを要するアプリケーションソフトウェアと緊密に統合されたDBMSで、アプリケーションのエンドユーザーから隠され、継続的なメンテナンスをほとんど(あるいは全く)必要としないものである<ref>Graves, Steve. [http://www.embedded-computing.com/articles/id/?2020 "COTS Databases For Embedded Systems"] {{Webarchive|url=https://web.archive.org/web/20071114050734/http://www.embedded-computing.com/articles/id/?2020 |date=2007-11-14 }}, ''Embedded Computing Design'' magazine, January 2007. Retrieved on August 13, 2008.</ref>。 |
|||
*エンドユーザー・データベースは、個々のエンドユーザーによって開発されたデータから構成されている。たとえば、文書、スプレッドシート、プレゼンテーション、マルチメディア、およびその他のファイルの集合体である。このようなデータベースをサポートするいくつかの製品が存在する。その中には、本格的なDBMSよりもはるかに単純で、基本的なDBMSの機能を備えているものもある。 |
|||
* [[連合データベース]]システムは、複数の異なるデータベースから構成され、それぞれは独自のDBMSを持っている。これは連合データベース管理システム (FDBMS) によって単一のデータベースとして扱われ、あるいは複数の自律的なDBMSを透過的に統合し(この場合、異種データベースシステムでもある)、統合された概念ビューを提供するものである。 |
|||
* マルチデータベースという用語は、連合データベースの同義語として用いられることもあるが、単一のアプリケーション内で連携する、あまり統合されていないデータベースのグループを指す場合もある(例: FDBMSや管理された統合スキーマを持たない)。この場合、一般的には[[アトミックコミット|アトミックコミットプロトコル]](ACP、たとえば[[2相コミット|2フェーズコミットプロトコル]])を含む[[ミドルウェア]]が分散に使われ、参加データベース間での[[分散トランザクション|分散(グローバル)トランザクション]]を可能とする。 |
|||
* {{Ill2|グラフデータベース|en|Graph database}}は、ノード、エッジ、プロパティを持つグラフ構造を用いて情報を表現および保存するデータベースであり、NoSQLデータベースの一種である。任意のグラフを格納できる一般的なグラフデータベースは、{{Ill2|トリプルストア|en|Triplestore}}や[[ネットワーク型データベース]]などの特殊なグラフデータベースとは異なるものとして区別される。 |
|||
* {{Ill2|配列DBMS|en|Array DBMS}}は、衛星画像や気候シミュレーションの出力など、(通常は大規模な)多次元配列のモデリング、保存、検索を可能にするNoSQL DBMSの一種である。 |
|||
* [[ハイパーテキスト]]または[[ハイパーメディア]]・データベースでは、オブジェクト(例: 別のテキスト、記事、画像、または映画)を表す任意の単語やテキスト部分を、そのオブジェクトに[[ハイパーリンク]]することができる。ハイパーテキスト・データベースは、大量にある異種の情報を整理するのに特に有効である。たとえば、ユーザーがテキストの中を簡単に飛び回ることができる[[オンライン百科事典]]を整理するのに役立つ。したがって、[[ワールドワイドウェブ]]は大規模な分散型ハイパーテキストデータベースと言える。 |
|||
* [[知識ベース]](KB、kb、またはΔと略す<ref>Argumentation in Artificial Intelligence by Iyad Rahwan, Guillermo R. Simari</ref><ref>{{cite web |
|||
| title = OWL DL Semantics |
|||
| url = http://www.obitko.com/tutorials/ontologies-semantic-web/owl-dl-semantics.html |
|||
| access-date = 10 December 2010}}</ref>)は、[[知識管理]]のための特別な種類のデータベースであり、コンピュータ化された[[知識]]を収集、編成、および[[情報検索|検索]]するための手段を提供するものである。また、問題点とその解決策、あるいは関連する経験などを表すデータの集合でもある。 |
|||
* {{Ill2|モバイルデータベース|en|Mobile database}}は、[[携帯機器|モバイル・コンピューティング・デバイス]]で実行したり、他のデバイスと同期させたりできる。 |
|||
* {{Ill2|運用データベース|en|Operational database}}は、組織の運営に関する詳細なデータを格納する。通常、[[トランザクション]]を使用して、比較的大量の更新を処理する。たとえば、[[カスタマーリレーションシップマネジメント|顧客データベース]]は、企業の顧客に関する連絡先、信用情報、人口統計情報を記録し、人事データベースは、従業員に関する給与、福利厚生、技能データなどの情報を保持し、[[企業資源計画]]システムは、製品の部品、部品在庫、財務に関する詳細を管理し、財務データベースは、組織の収支、会計、および金融取引を監視する。 |
|||
* {{Ill2|並列データベース|en|Parallel database}}は、データのロード、[[索引 (データベース)|インデックス]]の作成、クエリの実行などの作業を並列化することで性能向上を図るものである。 |
|||
::基盤となるハードウェア・アーキテクチャによって分類される主な並列DBMSアーキテクチャは次のとおりである。 |
|||
::* [[共有メモリ|共有メモリ・アーキテクチャ]]: 複数のプロセッサが主記憶領域や他のデータスト レージを共有する。 |
|||
::* {{Ill2|共有ディスク・アーキテクチャ|en|Shared-disk architecture|label=共有ディスク・アーキテクチャ}}: 各処理装置(通常は複数のプロセッサで構成)は、独自の主記憶領域を持つが、他のストレージは全装置で共有する。 |
|||
::* [[シェアード・ナッシング・アーキテクチャ]]: 各処理装置が独自の主記憶領域その他のストレージを持つ。 |
|||
* {{Ill2|確率的データベース|en|Probabilistic database}}:[[ファジィ論理]]を採用して不正確なデータから推論を引き出す。 |
|||
* {{Ill2|リアルタイムデータベース|en|Real-time 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では、一般的に、アプリケーションを同じコンピュータ上で動作させ、[[コンピュータ端末]]または端末エミュレーションソフトウェアを通じてアクセスすることしかできなかった。[[クライアントサーバモデル|クライアント・サーバー・アーキテクチャ]]は、アプリケーションはクライアントのデスクトップ上にあり、サーバー上に存在するデータベースが処理を分散できるように開発された。これが進化して、[[アプリケーションサーバ|アプリケーションサーバー]]や[[ウェブサーバー]]を組み込んだ[[多層アーキテクチャ]]となり、エンドユーザーインターフェイスは[[ウェブブラウザー]]を介してアクセスし、データベースは隣接する層に直接接続されるのみとなった{{sfn|Connolly|Begg|2014|pp=106–113}}。 |
|||
汎用DBMSは、公開の[[アプリケーション・プログラミング・インタフェース]](API)と、オプションで[[SQL]]などの[[データベース言語]]用のプロセッサを提供して、データベースと対話し操作するアプリケーションを作成できるようにする。特殊用途のDBMSは、プライベートなAPIを使用し、特別にカスタマイズして単一のアプリケーションにリンクされることがある。たとえば、[[電子メール]]システムは、メッセージの挿入、削除、添付ファイルの処理、ブロックリストの検索、メッセージと電子メールアドレスの関連付けなど、汎用DBMSの機能の多くを実行するが、これらの機能は電子メールの処理に必要なものに限定されている。 |
|||
== アプリケーション == |
|||
{{main|{{ill2|データベースアプリケーション|en|Database application}}}} |
|||
データベースとの外部相互作用は、DBMSと接続するアプリケーション・プログラムを介して行われる{{sfn|Connolly|Begg|2014|p=65}}。アプリケーションは、ユーザーが文字的または視覚的にSQLクエリを実行できる[[データベース管理ツールの比較|データベースツール]]から、情報を格納し検索するためにデータベースを使用するWebサイトまで、多岐にわたる。 |
|||
=== アプリケーション・プログラム・インタフェース === |
|||
[[プログラマー]]は、[[アプリケーション・プログラミング・インタフェース]](API)または[[データベース言語]]を介して、データベース({{Ill2|データソース|en|Datasource}}と呼ばれることもある)との相互対話を[[コーディング]]する。選択された特定のAPIや言語は、DBMSによって直接的にサポートされるか、または[[プリプロセッサ]]またはブリッジングAPIを介して間接的にサポートされる必要がある。APIの中にはデータベースに依存しないことを目的とするものもあり、[[ODBC]]はそのよく知られた例である。その他の一般的なAPIには、[[JDBC]]や[[ADO.NET]]がある。 |
|||
== データベース言語 == |
|||
データベース言語は、次のような作業を可能とする特殊用途の言語であり、{{Ill2|部分言語|en|Sublanguage}}として区別されることもある。 |
|||
* [[データ制御言語]](DCL)- データへのアクセスを制御する。 |
|||
* [[データ定義言語]](DDL)- テーブルの作成、変更、削除などのデータ型の定義や、テーブル間の関係を定義する。 |
|||
* [[データ操作言語]](DML)- 発生データ<!-- data occurrences -->の挿入、更新、削除などの作業を実行する。 |
|||
* {{Ill2|データ問い合わせ言語|en|Data query language}}(DQL)- 情報を検索し、派生情報を導出できる。 |
|||
データベース言語は、特定のデータモデルに特化した言語である。著名な例として次のものがある。 |
|||
* SQLは、データ定義、データ操作、およびクエリ(問い合わせ)の役割を1つの言語で兼ね備えたものである。SQLは、[[コッドの12の規則|コッドによって説明されたリレーショナルモデル]]とはからいくつかの点で異なっているが(たとえば、テーブルの行と列を並び替えることができる)、リレーショナルモデルの最初の商用言語の1つである。SQLは1986年に[[米国規格協会]](ANSI)標準となり、1987年に[[国際標準化機構]](ISO)標準となった。この標準はそれ以降も定期的に強化されており、すべての主流の商用リレーショナルDBMSによってサポートされている(適合性の程度はさまざまである){{sfn|Chapple|2005}}<ref name="IBM-sql">{{cite web | title = Structured Query Language (SQL) | publisher = International Business Machines | url = http://publib.boulder.ibm.com/infocenter/db2luw/v9/index.jsp?topic=com.ibm.db2.udb.admin.doc/doc/c0004100.htm | date = October 27, 2006 | access-date = 2007-06-10 }}</ref>。 |
|||
* [[オブジェクト問い合わせ言語|OQL]]は、オブジェクトモデル言語標準である([[Object Data Management Group]]による)。これは、[[JDOQL]]や{{Ill2|EJB QL|en|EJB QL}}などの新しいクエリ言語の設計に影響を与えている。 |
|||
* [[XQuery]]は、{{Ill2|MarkLogic|en|MarkLogic}}や{{Ill2|eXist|en|eXist}}などのXMLデータベースシステム、OracleやDb2などのXML機能を備えたリレーショナルデータベース、およびSaxonなどのインメモリXMLプロセッサで実装された標準のXMLクエリ言語である。 |
|||
* {{Ill2|SQL/XML|en|SQL/XML}}は、XQueryとSQLを組み合わせたものである{{sfn|Wagner|2010}}。 |
|||
データベース言語には、次のような機能を組み込んでいるものもある。 |
|||
* DBMS固有の構成やストレージエンジンの管理。 |
|||
* クエリ結果を変更するための計算。たとえば、カウント、合計、平均、並び替え、グループ化、クロスリファレンス。 |
|||
* 制約の適用(例: 自動車データベースでは、1台の車ごとに1種類のエンジンのみ許可される)。 |
|||
* プログラマーの便宜のために、クエリ言語のアプリケーション・プログラミング・インターフェース版。 |
|||
== ストレージ == |
|||
{{Main|[[記憶装置]]<!--Computer data storage-->|[[データベースエンジン]]<!--Database engine-->}} |
|||
データベースストレージは、データベースの物理的な実体の格納庫である。これは、データベースアーキテクチャの「''内部(物理)レベル''」を構成する。また、必要に応じて「内部レベル」から「概念レベル」や「外部レベル」を再構築するために必要なすべての情報(たとえば[[メタデータ]]、「データに関するデータ」、内部[[データ構造]]など)も含んでいる。デジタル・オブジェクトとしてのデータベースには、データ、構造、セマンティクス(意味)の3つの層からなる情報が含まれ、保存する必要がある。長期間に渡って{{Ill2|データベース保存|en|Database preservation|label=データベースを保存}}し、長持ちさせるために、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 storage structures}}を使用する。性能を向上させるために、インデックス作成などの手法を使用することもある。従来のストレージは行指向であるが、[[列指向データベース管理システム|列指向データベース]]や相関データベース{{Enlink|Outline of databases#Types of databases|英語版|en}}もある。 |
|||
=== マテリアライズド・ビュー === |
|||
{{Main|[[マテリアライズドビュー|マテリアライズド・ビュー]]<!--Materialized view-->}} |
|||
性能を向上させるためにストレージを冗長化することがよくある。一般的な例は、頻繁に必要とされる外部ビュー(''external view'')や、クエリ結果から構成される[[マテリアライズドビュー|マテリアライズド・ビュー]](''materialized view'')の保存である。このようなビューを保存することで、必要になるたびに計算する費用を節約することができる。マテリアライズド・ビューの欠点は、元の更新されたデータベースデータと同期を維持するためにビューを更新する際に発生するオーバーヘッドと、ストレージの冗長化にかかる費用である。 |
|||
=== レプリケーション === |
|||
{{Main|[[データベースレプリケーション]]<!--Replication (computing)#Database replication-->}} |
|||
データベースは、データの可用性を向上させるために、データベース・オブジェクトの複製(1つ以上の[[データベースレプリケーション|レプリケーション]])によるストレージ冗長性を採用することがある。これによって、同じデータベース・オブジェクトに複数のエンドユーザーが同時アクセスした場合の性能を向上させ、また、分散データベースに部分的な障害が発生した場合の回復力を提供する。複製されたオブジェクトの更新には、オブジェクトのコピー間で同期される必要がある。多くの場合、データベース全体が複製される。 |
|||
== セキュリティ == |
|||
{{Main|{{ill2|データベースセキュリティ|en|Database security}}}} |
|||
{{ill2|データベースセキュリティ|en|Database security|label=データベース・セキュリティ}}は、データベースの内容、その所有者、およびそのユーザーを保護するためのあらゆる側面を扱う。その範囲は、意図的な不正なデータベースの使用から、権限のないエンティティ(たとえば、人やコンピュータプログラムなど)による意図しないデータベースへのアクセスまで、さまざまな保護に及ぶ。 |
|||
データベースアクセス制御は、データベース内のどの情報に誰が(人間または特定のコンピュータプログラム)アクセスを許可されるかを制御することを扱う。その情報には、特定のデータベースオブジェクト(例: レコード種類、特定レコード、データ構造)、特定のオブジェクトに対する特定の計算(例: クエリ種類、特定のクエリ)、または前者に対する特定のアクセス経路の使用(例: 情報にアクセスするために特定のインデックスまたは他のデータ構造の使用)が含まれる。データベースのアクセス制御は、データベース所有者から特別に許可された人員によって、保護された専用のセキュリティDBMSインタフェースを用いて設定される。 |
|||
アクセス制御の管理は、個人別に直接行うことも、個人と{{Ill2|特権 (コンピュータ)|en|Privilege (computing)|label=特権}}をグループに割り当てることも、(最も精巧なモデルでは)個人やグループにロール(役割)を割り当ててからロールに権限を付与することもできる。データセキュリティは、権限のないユーザーによるデータベースの閲覧や更新を阻止する。パスワードを使用すると、ユーザーはデータベース全体、または「サブスキーマ」と呼ばれる一部分へのアクセスを許可される。たとえば、従業員データベースには個々の従業員に関するすべてのデータを含めていても、あるグループのユーザーには給与データのみの閲覧を許可し、別のグループには職歴と医療データのみアクセスを許可することが可能である。DBMSがデータベースの入力、更新、問い合わせを対話的に行う方法を提供している場合、この機能によって個人データベースを管理することができる。 |
|||
一般に{{Ill2|データセキュリティ|en|Data security}}は、特定のデータチャンク(''data chunk''、塊)を物理的に保護すること(すなわち破損、破壊、削除から。{{Ill2|物理的セキュリティ|en|Physical security}}を参照)、または、データチャンクやその一部を意味のある情報に変換すること(例: それらが構成するビット列を見て、特定の有効なクレジットカード番号を決定する。[[データ暗号化]]を参照)の両方を扱う。 |
|||
変更およびアクセスの[[ロギング]]は、誰がどの属性にアクセスしたか、何が変更されたか、そしていつ変更されたかを記録する。ロギングサービスは、アクセスの発生や変更の記録を保持することで、後で[[デジタル・フォレンジクス|フォレンジック]]{{Ill2|データベース監査|en|Database audit}}を行うことを可能にする。場合によっては、データベースレベルで記録するのではなく、アプリケーションレベルのコードで変更を記録することもある。セキュリティ違反の検出を試みるために監視を設定することもできる。データベース・セキュリティには多くの利点があるため、組織はこれに真剣に取り組む必要がある。組織は、ファイアウォール内への侵入、ウィルスの蔓延、[[ランサムウェア]]などのセキュリティ違反やハッキング行為から守られる。これは、企業において、いかなる理由があっても部外者と共有することが許されない、重要な情報を保護するために役に立つ<ref>{{Cite book |title=Continuous auditing : theory and application |date=2018 |author1=David Y. Chan |author2=Victoria Chiu |author3=Miklos A. Vasarhelyi |isbn=978-1-78743-413-4 |edition=1st |location=Bingley, UK |oclc=1029759767}}</ref>。 |
|||
== トランザクションと同時平行 == |
|||
{{Further|[[並行性制御]]<!--Concurrency control-->}} |
|||
[[データベーストランザクション|データベース・トランザクション]]は、[[クラッシュ (コンピュータ)|クラッシュ(障害)]]からの復旧後に、ある程度の[[フォールトトレランス|耐障害性]]と[[データ完全性]]を導入するために使用することができる。データベーストランザクションは通常、データベースに対する一連の操作(データベースオブジェクトの読み込み、書き込み、{{Ill2|レコードロック|en|Record locking|label=ロック}}の取得や解放など)をカプセル化した作業の単位であり、データベースやその他のシステムでサポートされている抽象概念である。各トランザクションには、どのプログラム/コードの実行がそのトランザクションに含まれるかという点で、明確に定義された境界がある(トランザクションの設計者が、特別なトランザクションコマンドで決定する)。 |
|||
[[ACID (コンピュータ科学)|ACID]]という頭字語は、データベーストランザクションの理想的な特性である、[[原子性 (データベース)|原子性]](''atomicity'')、[[一貫性 (データベース)|一貫性]](''consistency'')、[[分離性 (データベース)|分離性]](''isolation'')、{{Ill2|耐久性 (データベース)|en|Durability (database systems)|label=永続性}}(''durability'')を表している。 |
|||
== 移行 == |
|||
{{See also|[[データ移行#データベース移行]]<!--Data migration#Database migration-->}} |
|||
あるDBMSで構築されたデータベースは、別のDBMSに移植できない(つまり、別のDBMSでは実行できない)。しかし、状況によっては、あるDBMSから別のDBMSにデータベースを移行(''database migration'')するのが望ましい場合がある。その理由は、主に経済的(DBMS によって[[TCO|総所有コスト]](TCO)が異なる)、機能的、および運用的(DBMSによって機能が異なることがある)である。移行には、あるDBMSの種類から別の種類へデータベースを変換することも含まれる。この変換では、(可能であれば)データベース関連のアプリケーション(つまり、関連するすべてのアプリケーションプログラム)をそのまま維持する必要がある。したがって、データベースの概念レベルおよび外部レベルの{{Ill2|データアーキテクチャ|en|Data architecture|label=アーキテクチャ}}は、変換時に維持する必要がある。また、アーキテクチャの内部レベルのいくつかの側面も維持されることが望まれる場合もある。複雑または大規模なデータベースの移行は、それ自体が複雑で費用のかかる(1度きりの)プロジェクトになる可能性があるので、移行を決定するときはその点を考慮する必要がある。これは、特定のDBMS間の移行を支援するツールが存在する可能性があるのにも関わらない。一般に、DBMSベンダーは、他の普及しているDBMSからデータベースをインポートするツールを提供している。 |
|||
== 構築、保守、およびチューニング == |
|||
{{Main|{{ill2|データベースチューニング|en|Database tuning}}}} |
|||
アプリケーションのデータベースを設計したら、次の段階はデータベースの構築である。通常、この用途で用いるために、適切な汎用DBMSを選択することができる。DBMSは、データベース管理者が必要なアプリケーションのデータ構造をDBMSの各データモデルに準じて定義するために必要な[[ユーザインタフェース|ユーザーインタフェース]]を提供する。その他のユーザーインタフェースは、必要なDBMSパラメータ(セキュリティ関連、ストレージ割り当てパラメータなど)を選択するために用いられる。 |
|||
データベースの準備が整うと(データ構造およびその他の必要なコンポーネントがすべて定義される)、通常は、運用を開始する前にアプリケーションの初期データを入力する(データベースの初期化は、通常は別プロジェクトとされ、多くの場合、一括挿入をサポートする専用のDBMSインタフェースを用いる)。場合によっては、アプリケーションのデータを持たない状態でデータベースが稼働し、その運用を経てデータが蓄積されることもある。 |
|||
データベースを作成し、初期化し、データを入力した後は、データベースを維持する必要がある。たとえば、より良い性能を得るために、さまざまなデータベース・パラメータを変更し、データベースを{{ill2|データベースチューニング|en|Database tuning|label=チューニング}}する必要があるかもしれない。あるいは、アプリケーションの機能を追加するために、アプリケーションのデータ構造を変更または追加し、新しい関連アプリケーションプログラムを作成するかもしれない。 |
|||
== バックアップと復元 == |
|||
{{Main|[[バックアップ]]<!--Backup-->}} |
|||
場合によっては、データベースを以前の状態に戻すことが必要となる(たとえばソフトウェアの誤りが原因でデータベースが破損していることが判明した場合や、誤ったデータで更新された場合など、さまざまな理由が考えられる)。そのために、バックアップ操作が時々または継続的に実施され、それぞれの望ましいデータベースの状態(すなわち、データ値とデータベースのデータ構造への埋め込み)が専用のバックアップファイルに保持される(これを効果的に行うための多くの技術が存在する)。データベース管理者がデータベースをこの状態に戻すと決めたとき(たとえば、データベースがこの状態にあった時、所望の時点を指定する)、これらのファイルをその状態を復元するために使用する。 |
|||
== 静的解析 == |
|||
ソフトウェア検証のための静的解析技術は、クエリ言語の領域にも適用することができる。特に、[[抽象解釈]]フレームワーク<!-- abstract interpretation framework -->は、適切な近似技術をサポートする方法として、リレーショナルデータベースのクエリ言語の分野に拡張されている{{sfn|Halder|Cortesi|2011}}。クエリ言語のセマンティクスは、データの具体的な領域(ドメイン)を適切に抽象化することによって調整することができる。リレーショナルデータベースシステムの抽象化は、特に、細粒度アクセス制御<!-- fine-grained access control -->や、電子透かしなどのセキュリティ分野で、多くの興味深い応用がある。 |
|||
== その他の機能 == |
|||
DBMSのその他の機能として、次のようなものもあげられる。 |
|||
* [[データベースログ]] - これは実行された機能の履歴を残すのに役立つ。 |
|||
* グラフィックコンポーネント - 特に[[データウェアハウス]]システムで、グラフやチャートを作成するためのもの。 |
|||
* [[クエリオプティマイザ]] - すべてのクエリに対してクエリを最適化し、クエリ結果を効率的に得るための[[実行計画]](手順の部分的な順序(ツリー))を選択する。特定のストレージエンジンに特化することもある。 |
|||
* データベース設計、アプリケーションプログラミング、アプリケーションプログラムの保守、データベース性能分析および監視、データベース構成監視、DBMSハードウェア構成(DBMSや関連データベースはコンピュータ、ネットワーク、ストレージ装置にまたがる場合がある)および関連するデータベースマッピング(特に分散DBMS)、ストレージ割り当てとデータベースレイアウトの監視、ストレージ移行のためのツールまたはフック。 |
|||
データベース管理とソース管理のために、ビルド、テスト、デプロイメントフレームワークに、これらの中心機能をすべて組み込んだ単一システムを求める声はますます高まっている。ソフトウェア業界における別の進化を借りて、そうした製品を「データベース用[[DevOps]]」として提供する企業もある<ref>{{cite web |
|||
| title = How Database Administration Fits into DevOps |author= Ben Linders |date= January 28, 2016 |
|||
| url = https://www.infoq.com/news/2016/01/database-administration-devops |
|||
| access-date = April 15, 2017 }}</ref>。 |
|||
== 設計とモデリング == |
|||
{{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便か)?」のような質問をする。これらの質問に対する回答によって、エンティティ(顧客、製品、フライト、フライト区間)に使用される用語の定義、およびそれらの関係や属性を確立する。 |
|||
概念データモデルを作成する過程で、[[ビジネスプロセスモデリング|ビジネスプロセス]]からの入力や、組織内の[[ワークフロー]]分析からの入力が必要な場合がある。これによって、データベースにどのような情報が必要で、何を省略できるかを特定することができる。たとえば、データベースに現在のデータだけでなく、過去の履歴データも保持する必要があるかどうかを決定するのに役立つ。 |
|||
ユーザーが満足できる概念データモデルを作成したら、次の段階では、これをデータベース内の関連データ構造を実装する[[スキーマ (データベース)|スキーマ]]に変換する必要がある。この過程は、しばしば論理データベース設計と呼ばれ、スキーマの形で表現された{{Ill2|論理スキーマ|en|Logical schema|label=論理データモデル}}を作成する。概念データモデルがデータベース技術の選択と関係しないのに対し(少なくとも理論的には)、論理データモデルは、選択したDBMSがサポートする特定のデータベースモデルの観点で表現される。(データモデルとデータベースモデルという用語はしばしば同じ意味で用いられるが、この記事では特定のデータベースの設計を「''データモデル''」、その設計を表現するために用いられるモデリング表記を「''データベースモデル''」とそれぞれ呼ぶ。) |
|||
汎用データベースで最も普及しているデータベースモデルはリレーショナルモデル、より正確には、SQL言語で表現されるリレーショナルモデルである。このモデルを用いて論理データベースを設計する過程では、[[データベース正規化|正規化]]と呼ばれる系統的アプローチが用いられる。正規化の目的は、挿入、更新、削除の一貫性を自然に維持することで、おのおのの基本的「事実」を一箇所にのみ記録することでなされる。 |
|||
データベース設計の最終段階では、特定のDBMSに依存する性能、スケーラビリティ、回復、セキュリティなどに影響する決定をする。これはしばしば「物理データベース設計」と呼ばれ、[[物理スキーマ|物理データモデル]]を作成する。この段階での重要な目標は{{Ill2|データの独立性|en|Data independence}}である。これは、性能を最適化するために行われた決定を、エンドユーザーやアプリケーションから見えないようにすることを意味する。データの独立性には2つのタイプがあり、物理的なデータ独立性と論理的なデータ独立性である。物理設計は主に性能要件によって推進され、予想される作業負荷とアクセスパターンに関する十分な知識と、選択したDBMSが持つ機能についての深い理解を必要とする。 |
|||
物理データベース設計のもうひとつの側面はセキュリティである。これには、データベースオブジェクトへの[[アクセス制御]]を定義することと、データ自体のセキュリティレベルとメソッド(手順)の定義の両方を含んでいる。 |
|||
=== モデル === |
|||
{{Main|{{ill2|データベースモデル|en|Database model}}}} |
|||
[[File:Database models.jpg|thumb|upright=2|5種類のデータベースモデルを切り貼りした図。]] |
|||
[[データベースモデル]]とは、データベースの論理構造を決定するデータモデルの一種で、[[データ (コンピュータ)|データ]]をどのように格納、整理、操作するかの根本を規定するものである。データベースモデルの最も一般的な例は、テーブルベースの形式を使用するリレーショナルモデル(またはリレーションを近似したSQL)<!-- the SQL approximation of relational -->である。 |
|||
データベースの一般的な論理データモデルを次にあげる。 |
|||
* [[ナビゲーショナルデータベース|ナビゲーショナル・データベース]] |
|||
** [[階層型データモデル]] |
|||
** [[ネットワーク型データモデル]] |
|||
** {{Ill2|グラフデータベース|en|Graph database}} |
|||
* [[リレーショナルモデル]] |
|||
* [[実体関連モデル|実体関係モデル]] |
|||
** {{Ill2|拡張実体関係モデル|en|Enhanced entity–relationship model}} |
|||
* [[オブジェクトデータベース|オブジェクトモデル]] |
|||
* {{Ill2|ドキュメント指向データベース|en|Document-oriented database|label=ドキュメント型モデル}} {{Enlink|Document-oriented database|英語版|en}} |
|||
* {{Ill2|実体-属性-値モデル|en|Entity–attribute–value model}} |
|||
* [[スタースキーマ]] |
|||
オブジェクトリレーショナルデータベースは、この2つの関連する構造を組み合わせたものである。 |
|||
[[物理スキーマ|物理データモデル]]を次にあげる。 |
|||
* [[転置インデックス]] |
|||
* [[フラットファイルデータベース|フラットファイル]] |
|||
その他、次のようなモデルがある。 |
|||
* [[OLAPキューブ|多次元モデル]] |
|||
* {{Ill2|配列DBMS|en|Array DBMS|label=配列モデル}} |
|||
* [[マルチバリュー|多値モデル]] |
|||
特定の種類のデータ用に最適化された特殊モデルがある。 |
|||
* [[XMLデータベース]] |
|||
* {{Ill2|意味データモデル|en|Semantic data model|label=セマンティックモデル}} |
|||
* [[コンテンツストア]] |
|||
* {{Ill2|イベントストア|en|Event store}} |
|||
* [[時系列データベース|時系列モデル]] |
|||
=== 外部、概念、内部ビュー === |
|||
{{Main|{{ill2|三層スキーマ方式|en|Three-schema approach}}}} |
|||
{| class="vatop" style="width:100%;" |
|||
|[[Image:Traditional View of Data SVG.svg|thumb|upright=1.15|データに対する従来の捉え方は、ユーザ視点とコンピュータ視点という、2つの異なる視点からデータ定義することに焦点を当ててきた。アプリケーションと物理的に保存されたデータが直接に対応した結果、アプリケーション数の増加にともないデータの冗長性や整合性の問題が起こりやすかった。<ref name="ITL93">itl.nist.gov (1993) [http://www.itl.nist.gov/fipspubs/idef1x.doc ''Integration Definition for Information Modeling (IDEFIX)''] {{Webarchive|url=https://web.archive.org/web/20131203223034/http://www.itl.nist.gov/fipspubs/idef1x.doc |date=2013-12-03 }}. 21 December 1993.</ref>]] |
|||
|[[Image:A2 3 Three schema approach.svg|thumb|320px|{{ill2|三層スキーマ方式|en|Three-schema approach}}は、データを単一に定義する概念レベルを介すことで、データのアクセス方法(外部レベル)やデータの物理的な保存方法(内部レベル)に依存しないデータ提供を可能にするものである。<ref name= "ITL93"/>]] |
|||
|} |
|||
データベース管理システムは、データベースのデータに対して三層のビューを提供する。{{Efn|3層の分け方はいくつかの種類があり、次の説明は、外部-概念-内部の3層に分けているが、他にも概念-論理-物理の3層に分けた説明もある。}} |
|||
* '''外部レベル'''(''external level'')では、エンドユーザーの各グループがデータベース内のデータ構成をどのように見るかを定義する。1つのデータベースは、外部レベルで任意の数のビューを持つことができる。 |
|||
* '''概念レベル'''(''conceptual level'')では、さまざまな外部レベルのビューを、適合性のある単一の大域的ビュー<!-- compatible global view -->に統一化する{{sfn|Date|2003|pages=31–32}}。概念レベルのビューは、すべての外部ビューを組み立てる。それは、データベースのさまざまなエンドユーザーの範囲外であり、むしろデータベースアプリケーション開発者やデータベース管理者にとって興味対象である。 |
|||
* '''内部レベル'''(''internal level'')または'''物理レベル'''(''physical level'')とは、DBMS内におけるデータの内部編成のことである。これは費用、性能、スケーラビリティ、その他の運用上の事項に関与している。このレベルでは、データの記憶領域配置を扱い、性能を向上させるために[[索引 (データベース)|インデックス(索引)]]などの格納構造を用いる。冗長性に対する性能上の正当性が認められる場合は、一般的なデータから計算された個々のビュー([[マテリアライズドビュー|マテリアライズド・ビュー]])のデータを格納することもある。すべての活動において、全体的な性能を最適化するために、すべての外部ビューの性能要件(競合する可能性のある)の間でバランスをとる。 |
|||
データの概念ビュー(または論理ビュー)および物理ビュー(または内部ビュー)は、通常、1つしかないが、さまざまな外部ビューはいくつでも存在することができる。これにより、ユーザーは、技術的あるいは処理的な視点からではなく、よりビジネスに関連した視点からデータベース情報を見ることができるようになる。たとえば、企業の[[経営財務|財務]]部門は会社の経費の一部として全従業員の支払明細を必要とするが、[[ヒューマンリソース|人事]]部門の関心事である従業員に関する明細は必要ない。このように、部門によって、企業データベースには異なるビューが必要となる。 |
|||
三層データベース・アーキテクチャは、リレーショナルモデルの主要な初期推進力の1つであった{{Ill2|データの独立性|en|Data independence}}の概念に関連している。この考え方は、あるレベルで行われた変更は、より高いレベルのビューに影響を与えないというものである。たとえば、内部レベルの変更は、概念レベルのインタフェースを使用して記述されたアプリケーションプログラムには影響しないので、性能を向上させるために物理的変更を加えてもその影響を軽減することができる。 |
|||
概念ビューは、内部ビューと外部ビューの間に間接的なレベルを提供する。一方では、異なる外部ビュー構造に依存しないデータベースの共通ビューを提供し、また他方では、データがどのように格納され管理されるかという詳細(内部レベル)を抽象化する。原則として、すべてのレベルの、さらにはすべての外部ビューは、異なる[[データモデル]]で表現することができる。実際には通常、特定のDBMSは外部レベルと概念レベルの両方で同じデータモデルを使用する(例: リレーショナルモデル)。内部レベルは特定のDBMSの内側に隠されており、(その実装にも依存するが)異なるレベルの詳細が要求され、独自の種類のデータ構造型が用いられる。 |
|||
外部、概念、および内部レベルを分離することは、21世紀のデータベースを支配するリレーショナルデータベースモデルの実装における大きな特徴であった{{sfn|Date|2003|pages=31–32}}。 |
|||
== 研究 == |
|||
データベース技術は、1960年代から、[[アカデミー|学界]]や企業の研究開発グループ(例: [[IBM基礎研究所]])の両方で活発な研究課題となっている。研究活動には、{{Ill2|データベース理論|en|Database theory|label=理論}}や[[プロトタイプ]]の開発が含まれる。注目すべき研究課題には、[[データモデル|モデル]]、アトミックトランザクションの概念、関連する[[並行性制御]]技術、クエリ言語と[[クエリ最適化]]手法、[[RAID]]がある。 |
|||
データベース研究分野には、いくつかの専門[[学術誌]]や(例: ''[[:en:ACM Transactions on Database Systems|ACM Transactions on Database Systems]]''-TODS、''[[:en:Data and Knowledge Engineering|Data and Knowledge Engineering]]''-DKE)、年次[[学会 (会議)|会議]](例: [[Association for Computing Machinery|ACM]] [[SIGMOD]]、ACM [[:en:Symposium on Principles of Database Systems|PODS]]、[[:en:International Conference on Very Large Data Bases|VLDB]]、IEEE [[:en:ICDE|ICDE]])がある。 |
|||
日本の学会としては、[[日本データベース学会]]があげられる。 |
|||
== 参照項目 == |
|||
{{Div col|colwidth=18em}} |
|||
* [[データベース管理ツールの比較]] |
|||
* {{ill2|オブジェクトデータベース管理システムの比較|en|Comparison of object database management systems}} |
|||
* {{ill2|オブジェクト・リレーショナルデータベース管理システムの比較|en|Comparison of object–relational database management systems}} |
|||
* [[リレーショナルデータベース管理システムの比較]] |
|||
* {{ill2|データ階層|en|Data hierarchy}} |
|||
* {{ill2|データバンク|en|Data bank}} |
|||
* {{ill2|データストア|en|Data store}} |
|||
* {{ill2|データベース理論|en|Database theory}} |
|||
* {{ill2|データベーステスト|en|Database testing}} |
|||
* {{ill2|データベース中心アーキテクチャ|en|Database-centric architecture}} |
|||
* [[フラットファイルデータベース]] |
|||
<!-- * [[:en:INP (database)|INP (database)]] --> |
|||
<!-- * [[:en:Journal of Database Management|Journal of Database Management]] --> |
|||
<!-- * [[:en:Question-focused dataset|Question-focused dataset]] --> |
|||
{{Div col end}} |
|||
== ノート == |
|||
{{notelist}} |
|||
== 脚注 == |
== 脚注 == |
||
{{脚注ヘルプ}} |
{{脚注ヘルプ}} |
||
<references/> |
|||
== |
=== 出典 === |
||
{{Reflist|30em}} |
|||
{{関連項目過剰|date=2020年11月}} |
|||
* データが保存される場所(データベースもこの1つ) |
|||
** [[データウェアハウス]]: データ倉庫、DWH。データの貯蔵と分析を主目的としたデータ保存場所 |
|||
** [[データマート]]: データ販売所。特定の限定された側面からデータを解析しその結果を素早く届けることを目的としたデータ保存場所. |
|||
** [[データセンター]] |
|||
** [[ストレージ (曖昧さ回避)|ストレージ]]: データが保存される場所の総称。 |
|||
* [[データモデリング]] |
|||
* [[データ管理システム]] |
|||
* [[関係データベース]] |
|||
** [[SQL]] |
|||
** [[オブジェクト関係データベース]] |
|||
* [[XMLデータベース]] |
|||
** [[XQuery]] |
|||
** [[XML Schema]] |
|||
* [[トランザクション]] |
|||
** [[ACID (コンピュータ科学)|ACID特性]] |
|||
** ロック |
|||
** [[トランザクション分離レベル]] |
|||
** [[分散トランザクション]] |
|||
** [[オンライントランザクション処理]] (OLTP) |
|||
* [[ディレクトリサービス]] |
|||
* [[超高速データベース]] |
|||
* [[dbm]] |
|||
* [[オブジェクト関係マッピング]] |
|||
* [[ベース・レジストリ]] |
|||
* データベースに関する[[資格]] |
|||
** [[データベーススペシャリスト試験]]([[国家資格]]、[[情報処理技術者試験]]) |
|||
** [[ソフトウェア開発技術者試験]](国家資格、情報処理技術者試験) |
|||
** [[オラクルマスター]]([[オラクル (企業)|オラクル社]]認定の[[ベンダー資格]]) |
|||
== |
== 出典 == |
||
{{refbegin|30em}} |
|||
* 増永良文:「データベース入門」(第2版)、サイエンス社、ISBN 978-4-7819-1500-5、(2021年)。 |
|||
* {{cite journal |
|||
== 関連学会 == |
|||
| first1 = Charles W. |
|||
*[[日本データベース学会]] https://dbsj.org/ |
|||
| last1 = Bachman |
|||
*[[Special Interest Group on Management of Data]] ([[Association for Computing Machinery|ACM]] [[Special Interest Group on Management of Data|SIGMOD]]) |
|||
| author1-link = Charles Bachman |
|||
**https://www.sigmod.org/ |
|||
| title = The Programmer as Navigator |
|||
**http://www.sigmodj.org/ |
|||
| date = 1973 |
|||
| volume = 16 |
|||
| issue = 11 |
|||
| pages = 653–658 |
|||
| journal = Communications of the ACM |
|||
| doi = 10.1145/355611.362534 |
|||
| doi-access= free |
|||
}} |
|||
* {{cite book |
|||
| last1 = Beynon-Davies |
|||
| first1 = Paul |
|||
| date = 2003 |
|||
| title = Database Systems |
|||
| edition = 3rd |
|||
| publisher = Palgrave Macmillan |
|||
| isbn = 978-1403916013 |
|||
}} |
|||
* {{cite web |
|||
| last1 = Chapple |
|||
| first1 = Mike |
|||
| title = SQL Fundamentals |
|||
| date = 2005 |
|||
| work = Databases |
|||
| publisher = About.com |
|||
| url = http://databases.about.com/od/sql/a/sqlfundamentals.htm |
|||
| access-date = 28 January 2009 |
|||
| archive-url = https://web.archive.org/web/20090222225300/http://databases.about.com/od/sql/a/sqlfundamentals.htm |
|||
| archive-date = 22 February 2009 |
|||
| url-status = live |
|||
}} |
|||
* {{cite techreport |
|||
| url = https://deepblue.lib.umich.edu/bitstream/handle/2027.42/4163/bac0294.0001.001.pdf?sequence=5&isAllowed=y |
|||
| title = Description of a set-theoretic data structure |
|||
| first1 = David L. |
|||
| last1 = Childs |
|||
| date = 1968a |
|||
| id = Technical Report 3 |
|||
| series = CONCOMP (Research in Conversational Use of Computers) Project |
|||
| publisher = University of Michigan |
|||
| author-link = David L. Childs |
|||
}} |
|||
* {{cite techreport |
|||
| url = https://deepblue.lib.umich.edu/bitstream/handle/2027.42/4164/bac0293.0001.001.pdf?sequence=5&isAllowed=y |
|||
| title = Feasibility of a set-theoretic data structure: a general structure based on a reconstituted definition |
|||
| first1 = David L. |
|||
| last1 = Childs |
|||
| date = 1968b |
|||
| id = Technical Report 6 |
|||
| series = CONCOMP (Research in Conversational Use of Computers) Project |
|||
| publisher = University of Michigan |
|||
| author-link = David L. Childs |
|||
}} |
|||
* {{cite book |
|||
| first1 = Raul F. |
|||
| last1 = Chong |
|||
| first2 = Xiaomei |
|||
| last2 = Wang |
|||
| first3 = Michael |
|||
| last3 = Dang |
|||
| first4 = Dwaine R. |
|||
| last4 = Snow |
|||
| chapter = Introduction to DB2 |
|||
| chapter-url = http://www.ibmpressbooks.com/articles/article.asp?p=1163083 |
|||
| title = Understanding DB2: Learning Visually with Examples |
|||
| edition = 2nd |
|||
| year = 2007 |
|||
| isbn = 978-0131580183 |
|||
| access-date = 17 March 2013 |
|||
}} |
|||
* {{cite journal |
|||
| last1 = Codd |
|||
| first1 = Edgar F. |
|||
| author1-link = Edgar F. Codd |
|||
| date = 1970 |
|||
| url = http://www.seas.upenn.edu/~zives/03f/cis550/codd.pdf |
|||
| title = A Relational Model of Data for Large Shared Data Banks |
|||
| journal = Communications of the ACM |
|||
| volume = 13 |
|||
| issue = 6 |
|||
| pages = 377–387 |
|||
| doi=10.1145/362384.362685 |
|||
| s2cid = 207549016 |
|||
}} |
|||
* {{cite book |
|||
| last1 = Connolly |
|||
| first1 = Thomas M. |
|||
| last2 = Begg |
|||
| first2 = Carolyn E. |
|||
| date = 2014 |
|||
| title = Database Systems – A Practical Approach to Design Implementation and Management |
|||
| edition = 6th |
|||
| isbn = 978-1292061184 |
|||
| publisher = Pearson |
|||
}} |
|||
* {{cite book |last1 = Date |
|||
|first1 = C. J. |
|||
|author1-link = Christopher J. Date |
|||
|title = An Introduction to Database Systems |
|||
|edition = 8th |
|||
|publisher = Pearson |
|||
|year = 2003 |
|||
|isbn = 978-0321197849 |
|||
|url-access = registration |
|||
|url = https://archive.org/details/introductiontoda0000date |
|||
}} |
|||
* {{cite journal |
|||
| first1 = Raju |
|||
| last1 = Halder |
|||
| first2 = Agostino |
|||
| last2 = Cortesi |
|||
| url = http://www.dsi.unive.it/~cortesi/paperi/CL2012.pdf |
|||
| doi = 10.1016/j.cl.2011.10.004 |
|||
| title = Abstract Interpretation of Database Query Languages |
|||
| journal = Computer Languages, Systems & Structures |
|||
| volume = 38 |
|||
| issue = 2 |
|||
| year = 2011 |
|||
| pages = 123–157 |
|||
| issn = 1477-8424 |
|||
}} |
|||
* {{cite conference |
|||
| first1 = William |
|||
| last1 = Hershey |
|||
| first2 = Carol |
|||
| last2 = Easthope |
|||
| url = https://docs.google.com/open?id=0B4t_NX-QeWDYNmVhYjAwMWMtYzc3ZS00YjI0LWJhMjgtZTYyODZmNmFkNThh |
|||
| title = A set theoretic data structure and retrieval language |
|||
| conference = Spring Joint Computer Conference, May 1972 |
|||
| journal = ACM SIGIR Forum |
|||
| volume = 7 |
|||
| issue = 4 |
|||
| year = 1972 |
|||
| pages = 45–55 |
|||
| doi = 10.1145/1095495.1095500 |
|||
}} |
|||
* {{cite book |
|||
| last1 = Nelson |
|||
| first1 = Anne Fulcher |
|||
| last2 = Nelson |
|||
| first2 = William Harris Morehead |
|||
| date = 2001 |
|||
| title = Building Electronic Commerce: With Web Database Constructions |
|||
| publisher = Prentice Hall |
|||
| isbn = 978-0201741308 |
|||
}} |
|||
* {{cite journal |
|||
| first1 = Ken |
|||
| last1 = North |
|||
| url = http://drdobbs.com/blogs/database/228700616 |
|||
| title = Sets, Data Models and Data Independence |
|||
| journal = Dr. Dobb's |
|||
| date = 10 March 2010 |
|||
| archive-url = https://web.archive.org/web/20121024064523/http://www.drdobbs.com/database/sets-data-models-and-data-independence/228700616 |
|||
| archive-date = 24 October 2010 |
|||
| url-status = live |
|||
}} |
|||
* {{cite book |last1 = Tsitchizris |
|||
|first1 = Dionysios C. |
|||
|last2 = Lochovsky |
|||
|first2 = Fred H. |
|||
|date = 1982 |
|||
|title = Data Models |
|||
|isbn = 978-0131964280 |
|||
|publisher = Prentice–Hall |
|||
|url = https://archive.org/details/datamodels00tsic/page/13/mode/1up |
|||
|url-access = registration |
|||
|ref = harv |
|||
}} |
|||
* {{cite book |first1 = Jeffrey |
|||
|last1 = Ullman |
|||
|first2 = Jennifer |
|||
|last2 = Widom |
|||
|date = 1997 |
|||
|title = A First Course in Database Systems |
|||
|publisher = Prentice–Hall |
|||
|isbn = 978-0138613372 |
|||
|url = https://archive.org/details/firstcourseindat00ullm |
|||
}} |
|||
* {{Citation |
|||
| title = SQL/XML:2006 – Evaluierung der Standardkonformität ausgewählter Datenbanksysteme |
|||
| last1 = Wagner |
|||
| first1 = Michael |
|||
| year = 2010 |
|||
| publisher = Diplomica Verlag |
|||
| isbn = 978-3836696098 |
|||
}} |
|||
{{refend}} |
|||
== 推薦文献 == |
|||
* {{Cite book|和書|title=データベース入門 [第2版]|date=2021年2月10日|year=2021|publisher=サイエンス社|isbn=978-4-7819-1500-5|author=増永良文}} |
|||
* {{Cite book|和書|title=リレーショナルデータベース入門 [第3版]|date=2017年2月|year=2017|publisher=サイエンス社|isbn=978-4-7819-1390-2|author=増永良文}} |
|||
* Ling Liu and Tamer M. Özsu (Eds.) (2009). "[https://www.springer.com/computer/database+management+&+information+retrieval/book/978-0-387-49616-0 Encyclopedia of Database Systems], 4100 p. 60 illus. {{ISBN|978-0-387-49616-0}}. |
|||
* Gray, J. and Reuter, A. ''Transaction Processing: Concepts and Techniques'', 1st edition, Morgan Kaufmann Publishers, 1992. |
|||
* Kroenke, David M. and David J. Auer. ''Database Concepts.'' 3rd ed. New York: Prentice, 2007. |
|||
* [[:en:Raghu Ramakrishnan|Raghu Ramakrishnan]] and [[:en:Johannes Gehrke|Johannes Gehrke]], ''[http://pages.cs.wisc.edu/~dbbook/ Database Management Systems]'' |
|||
* [[:en:Abraham Silberschatz|Abraham Silberschatz]], [[:en:Henry F. Korth|Henry F. Korth]], S. Sudarshan, ''[http://www.db-book.com/ Database System Concepts]'' |
|||
* {{cite book|last1=Lightstone |first1=S. |first2=T. |last2=Teorey |first3=T. |last3=Nadeau |title=Physical Database Design: the database professional's guide to exploiting indexes, views, storage, and more |publisher=Morgan Kaufmann Press |year=2007 |isbn=978-0-12-369389-1 |ref=none}} |
|||
* Teorey, T.; Lightstone, S. and Nadeau, T. ''Database Modeling & Design: Logical Design'', 4th edition, Morgan Kaufmann Press, 2005. {{ISBN|0-12-685352-5}} |
|||
== 外部リンク == |
== 外部リンク == |
||
{{Sister project links|wikt=database|commons=Category:Database|v=Topic:Databases}} |
|||
* {{Cite web|url= https://note.com/masayamori/n/nc23283f2f92e |title=企業のデータ活用の中心であるデータベースの進化とその広がり|accessdate=2021-03-15}} |
|||
*[http://www.fileextension.org/DB DB File extension] - DB拡張子を持つファイルに関する情報{{En icon}} |
|||
{{Navboxes |
|||
{{Database models}} |
|||
|list= |
|||
{{Computer science}} |
|||
{{Database}} |
{{Database}} |
||
{{Databases}} |
|||
{{コンピュータ科学}} |
|||
{{ |
{{Database models}} |
||
{{Data warehouse}} |
|||
{{Semantic Web}} |
|||
{{Systems science}} |
|||
}} |
|||
{{Authority control}} |
|||
{{DEFAULTSORT:てえたへえす}} |
{{DEFAULTSORT:てえたへえす}} |
||
[[Category:データベース |
[[Category:データベース]] |
||
[[Category:データ |
[[Category:データベース管理システム]] |
||
[[Category:コンピュータのデータ]] |
|||
[[Category:コンピュータの利用]] |
|||
[[Category:コンピュータのユーザインタフェース]] |
2022年8月26日 (金) 09:58時点における版
コンピューティングにおいて、データベース(英: database)は、電子的に保存され、アクセスできる組織化されたデータの集合である。小規模なデータベースはファイルシステム上に保存されるが、大規模なデータベースはコンピュータ・クラスターまたはクラウド・ストレージで保存される。データベース設計に関わる分野は多岐にわたり、データ・モデリング、効率的なデータ表現と保存、クエリ言語、機密データのセキュリティやプライバシー、同時アクセスとフォールトトレランスのサポートを含む分散コンピューティングの課題など、形式技術と実用的な考慮事項に及ぶ。
データベース管理システム(DBMS)は、エンドユーザー、アプリケーション、およびデータベース自体と対話し、データを取得し分析するためのソフトウェアである。さらに、DBMSソフトウェアには、データベースを管理するために提供される関連機能も含まれている。データベース、DBMS、関連アプリケーションの全体を含めてデータベースシステムと呼ぶ。しばしば「データベース」という用語が、DBMS、データベースシステム、またはデータベースに関連するアプリケーションのいずれかを指す場合に漠然と使われている。
コンピュータ科学者は、データベース管理システムを、サポートするデータベースモデルに基づいて分類している。リレーショナルデータベースは、1980年代の主流であった。これらは、データを一連の表の行と列としてモデル化し、大多数はデータの書き込みとクエリ(問い合わせ)にSQLを使用する。2000年代には、異なるクエリ言語を使用する NoSQL と総称される非リレーショナルデータベースが普及した。
用語と概要
形式的な「データベース」は、関連するデータの集合とその編成方法を指す。通常、このデータへのアクセスは、「データベース管理システム」(DBMS)によって提供される。DBMSは、ユーザーが1つまたは複数のデータベースと対話し、データベースに含まれるすべてのデータへのアクセスを提供するコンピュータソフトウェアの統合セットで構成されている(ただし、特定のデータへのアクセスを制限する制約が存在することもある)。DBMSは、大量の情報の入力、保存、および検索を可能にするさまざまな機能を提供し、その情報がどのように編成されているかを管理する方法を提供する。
このように、両者は密接な関係にあるため、「データベース」という用語は、データの集まりとしてのデータベースと、それを操作するために用いるDBMSの両方を指す言葉として気軽に使われることが多い。
情報技術の専門家以外の世界では、「データベース」という用語は、関連するデータの集合体(例: スプレッドシートやカードインデックスなど)を指すことが多く、サイズや使用要件の点からデータベース管理システムを用いることが一般的である[1]。
既存のDBMSは、データベースとそのデータを管理するためのさまざまなな機能を提供しており、それらは次の4つの主要な機能群に分類される。
- データ定義(Data definition)- データの編成を規定する定義を作成、変更、および削除する。
- 更新(Update)- 実データを挿入、変更、および削除する[2]。
- 検索(Retrieval)- 情報を直接利用できる形式で、または他のアプリケーションでさらに処理できる形式で提供する。検索したデータは、基本的にデータベースに保存されているのと同じ形式で利用できる他、データベースの既存のデータを変更または組み合わせて得た新たな形式でも利用することができる[3]。
- 管理(Administration)- ユーザーの登録と監視、データセキュリティの実施、性能の監視、データ完全性の維持、並行性制御の対応、予期しないシステム障害などの事象によって破損した情報の回復など[4]。
データベースとそのDBMSは共に、特定のデータベースモデルの原則に準拠している[5]。 「データベースシステム」とは、データベースモデル、データベース管理システム、データベースを総称したものである[6]。
物理的には、データベース・サーバーは、実際のデータベースを格納し、DBMSと関連ソフトウェアのみを実行する専用コンピュータである。データベース・サーバーは通常、大容量のメモリと、安定したストレージ(例: RAIDディスクアレイ)を備えたマルチプロセッサ・コンピュータである。大容量のトランザクション処理環境では、複数台のサーバーと高速チャネルを介して接続されたハードウェア・データベース・アクセラレータも使用される。ほとんどのデータベース・アプリケーションの中心にDBMSがある。DBMSは、ネットワークのサポートを組み込んだカスタムのマルチタスク・カーネルを中心に構築されることもあるが、最近のDBMSは通常、これらの機能を提供するために、標準的なオペレーティングシステムに依存している[要出典]。
DBMSは重要な市場を形成しているため、コンピューターやストレージのベンダーは、自社の開発計画にDBMSの要件を考慮に入れていることが多い[7]。
データベースとDBMSは、サポートするデータベースモデル(リレーショナルやXMLなど)、実行するコンピュータの種類(サーバークラスタから携帯電話まで)、データベースへのアクセスに使用するクエリ言語(SQLやXQueryなど)、内部エンジニアリング(性能、スケーラビリティ、障害許容力、およびセキュリティに影響する)によって分類することができる。
歴史
データベースとそれぞれのDBMSの規模、機能、性能は桁違いに大きくなっている。これらの性能向上は、プロセッサ、コンピュータメモリ、コンピュータストレージ、およびコンピュータネットワークの技術進歩により可能となった。データベースの概念は、1960年代半ばに広く普及した磁気ディスクなどの直接アクセス記憶媒体の出現によって可能となった。それ以前のシステムは、磁気テープへのデータの順次保存に依っていた。その後のデータベース技術の発展は、データモデルまたはデータ構造に基づいて、ナビゲーショナル[8]、SQL/リレーショナル、ポストリレーショナルの3つの時代に分けることができる。
初期のナビゲーショナル・データモデルは、階層型モデルとネットワーク型モデル(CODASYLモデル)の2つが主であった。これらは、あるレコードから別のレコードへの関係を追跡するために、ポインタ(多くの場合、物理的なディスクアドレス)を使用することが特徴であった。
1970年にエドガー・F・コッドが提唱したリレーショナルモデルは、この伝統から脱却するもので、アプリケーションがリンクをたどるのではなく、内容からデータを検索すべきであると主張するものであった。リレーショナルモデルは、元帳型の表の集まりを組み合わせたもので、それぞれの表は異なる種類のエンティティ(実体)を格納する。1980年代半ばになって、コンピューティング・ハードウェアは、リレーショナルシステム(DBMSとアプリケーション)を幅広く普及するのに十分な性能を持つようになった。けれども、1990年代初頭には、すべての大規模なデータ処理アプリケーションにおいてリレーショナルシステムが主流となり、2018年現在も主流であり続けている。IBM Db2、Oracle、MySQL、Microsoft SQL Server、PostgreSQLは、最も検索されているDBMSである[9]。リレーショナルモデル用の主要なデータベース言語である標準SQLは、他のデータモデル用のデータベース言語にも影響を与えた[要出典]。
オブジェクトデータベースは、オブジェクト指向とリレーショナル型とのインピーダンスミスマッチ(相性の欠如)による不便さを解消するために1980年代に開発され、これにより「ポストリレーショナル(post-relational)」という言葉が生まれ、また、ハイブリッド型のオブジェクト・リレーショナルデータベースも開発された。
2000年代後半に登場した、次世代のポスト・リレーショナルデータベースは、高速なキーバリュー型ストアやドキュメント指向データベースを導入し、NoSQLデータベースと呼ばれるようになった。これと競合するNewSQLと呼ばれる次世代データベースは、リレーショナル/SQLモデルを維持しつつ、市販のリレーショナルDBMSと比較してNoSQLの高い性能に見合うような新しい実装を試みている。
1960年代、ナビゲーショナルDBMS
データベースという言葉が登場したのは、1960年代半ば以降に、直接アクセスストレージ(ディスクやドラム)が利用できるようになった時期と重なる。この用語は、過去のテープベースのシステムとは対照的に、日常のバッチ処理ではなく、対話的な共有での利用を可能にすることを意味した。オックスフォード英語辞典では、カリフォルニアのSystem Development Corporationが1962年に発表した報告書を、特定の技術的な意味で「データベース」という用語を初めて使用したものとして引用している[10]。
コンピュータの速度と機能が向上するに伴い、多くの汎用データベースシステムが登場し、1960年代半ばには多くのこうしたシステムが商用化されるようになった。標準化への関心が高まり、そうした製品の一つであるIntegrated Data Store(IDS)の制作者であるチャールズ・バックマンが、COBOLの作成と標準化を担当したグループCODASYL内にデータベース・タスクグループを設立した。1971年、データベース・タスクグループは、一般に「CODASYLアプローチ」として知られるようになった彼らの標準を提供し、まもなくこのアプローチに基づいた多くの商用製品が市場に参入した。
CODASYLアプローチ方式は、アプリケーションに対し、大規模ネットワーク内に形成された連結データセットを移動する機能を提供した。アプリケーションは、3つの方法のうちのいずれかによってレコードを見つけることができる。
- 主キーの使用(CALCキーとして知られ、典型的にはハッシュによって実装される)。
- あるレコードから別のレコードへの関係(セットと呼ばれる)の移動。
- すべてのレコードを順番にスキャンする。
その後のシステムで、B木(B-tree)が追加され、代替アクセス経路を提供するようになった。また、多くのCODASYLデータベースでは、エンドユーザー向けに(ナビゲーション型APIとは異なる)宣言型クエリ言語も追加された。しかし、CODASYLデータベースは複雑で、有用なアプリケーションを作るには多大な訓練と労力を要した。
また、IBMは、1966年に、Information Management System(IMS)として知られる独自のDBMSを持っていた。IMSは、アポロ計画のために作成されたソフトウェアのSystem/360への発展型であった。IMSは一般にCODASYLと概念が似ているが、そのデータナビゲーションのモデルは厳密な階層を使用し、CODASYLのネットワーク型モデルではなかった。どちらの概念も、データへのアクセス方法の観点から、後にナビゲーショナル・データベースと呼ばれるようになった。この用語は、1973年のバックマンのチューリング賞の講演「The Programmer as Navigator」によって広まった。IBMによって、IMSは階層型データベースとして分類されている。IDMSやCincom SystemsのTOTALデータベースは、ネットワーク型データベースに分類される。2014年現在、IMSは使用されている[11]。
1970年代、リレーショナルDBMS
エドガー・F・コッドは、カリフォルニア州サンノゼにあるIBMの研究室の1つで、主にハードディスクシステムの開発に携わっていた。彼は、CODASYLアプローチのナビゲーションモデルにおいて、特に「検索(search)」機能の欠如に不満を抱いていた。1970年、彼はデータベース構築の新しいアプローチを概説する多くの論文を書き、最終的に画期的な論文「大規模共有データバンクのためのデータのリレーショナルモデル(A Relational Model of Data for Large Shared Data Banks)」に結実させた[12]。
この論文で、彼は大規模なデータベースを保存し、操作するための新しいシステムについて説明した。コッドの考えは、CODASYLのように自由形式のレコードをある種の連結リストに格納するのではなく、データをいくつかの「テーブル」(table、表)として編成し、それぞれのテーブルを異なる種類のエンティティ(entity、実体)に使用することであった。各テーブルは、エンティティの属性を含む固定数の列を含むことになる。各テーブルの1つ以上の列は、テーブルの行を一意に識別するための主キーとして指定され、テーブル間の相互参照には、ディスクアドレスではなく、常にこの主キーが使用された。クエリにおいては、関係論理の数学的体系に基づく一連の操作を用いて、これらのキー関係に基づいてテーブルを結合する(モデルの名前の由来)。データを正規化された一連のテーブル(または関係(relation)、リレーション)に分割することで、各々の「ファクト(fact、事実)」を一度だけ保存するようにし、更新操作を簡略化する。ビュー(view)と呼ばれる仮想的なテーブルは、ユーザーごとに異なる方法でデータを表示することができるが、ビューを直接更新することはできなかった。
コッドは、テーブル、行、列ではなく、関係(relation)、組(tuple)、定義域(domain)という数学用語を使ってモデルを定義した。現在よく知られているこれらの用語は、初期の実装に由来するものである。コッドは後に、実際の実装が、モデルの基礎となった数学的な基礎から逸脱する傾向にあることを批判した。
テーブル間の関係を表すために、ディスクアドレスではなく主キー(ユーザー指向の識別子)を使用したのは、主に2つの動機があった。エンジニアリングの観点からは、費用がかかるデータベースの再編成をすることなく、テーブルの再配置やサイズ変更を可能とした。しかし、コッドは、セマンティクス(意味)の違いにより強い興味を持っていた。明示的な識別子を使用することで、純粋な数学的定義で更新操作を定義することが容易になり、一階述語論理という確立した学問分野の観点でクエリ操作を定義できるようになった。これらの操作は純粋な数学的性質があるため、クエリ最適化の基礎をなす証明可能な正しい方法でクエリを書き換えることが可能となる。テーブル間の接続は明示的ではなくなったが、階層型モデルやネットワーク型モデルと比較して表現力が損なわれることはない。
階層型モデルやネットワーク型モデルでは、レコードが複雑な内部構造を持つことが許容された。たとえば、ある従業員の給与履歴は、従業員レコードの中の「繰り返しグループ」として表わされることがある。リレーショナルモデルでは、正規化の過程によって、そのような内部構造は、論理キーのみで結合された複数のテーブルに保持されたデータで置き換えられた。
たとえば、データベースシステムの一般的な使い方として、ユーザーに関する情報、名前、ログイン情報、さまざまな住所や電話番号を突き止めることがあげられる。ナビゲーショナル方式では、これらのデータはすべて1つの可変長レコード内に格納される。リレーショナル方式では、そのデータは(たとえば)ユーザーテーブル、アドレステーブル、電話番号テーブルに「正規化(normalize)」される。これらの任意のテーブル内には、実際に住所や電話番号が提供された場合のみ、レコードが作成される。
コッドは、(ディスクアドレスではなく)論理的な識別子を使用して行/レコードを識別するだけでなく、アプリケーションが複数のレコードからデータを組み立てる方法も変更した。アプリケーションがリンクを移動して1レコードずつデータを収集することを要求するのではなく、アプリケーションは、宣言型のクエリ言語を使用して(どのようにデータを見つけるかというアクセス経路ではなく)どのようなデータが必要なのかを表現する。データへの効率的なアクセス経路を見つけるのは、アプリケーションのプログラマーではなく、データベース管理システムの責任となった。クエリ最適化(query optimization)と呼ばれるこの過程は、クエリが数学的論理の観点で表現されているという事実に基づいている。
コッドの論文は、バークレー校のユージン・ウォンとマイケル・ストーンブレーカーの二人によって着目された。彼らは、地理データベースプロジェクトにすでに割り当てられていた資金と、コードを作成する学生プログラマーを使って、INGRESと呼ばれるプロジェクトを開始した。INGRESは、1973年の初頭に最初のテスト製品を提供し、1979年には一般に広く使用されるようになった。INGRESは、データアクセスのためのQUELと呼ばれる「言語(language)」の使用を含め、多くの点でIBM System Rと類似していた。時の経過とともに、INGRESは新しい標準SQLに移行していった。
IBM自身は、リレーショナルモデルのテスト実装であるPRTVと、製品版であるBusiness System 12の開発を一度行ったが、いずれも現在は廃止されている。Honeywellは、Multics用のMRDSを開発したが、現在ではAlphora DataphorとRelの2つの新しい実装が存在する。「リレーショナル」と呼ばれる他のDBMSの実装のほとんどは、実際にはSQL DBMSである。
1970年、ミシガン大学は、デイヴィッド・L・チャイルズの集合論的データモデルに基づくMICRO情報管理システム[13]の開発を開始した[14][15][16]。MICROは、非常に大きなデータセットを管理するために、米国労働省、米国環境保護庁、アルバータ大学、ミシガン大学、ウェイン州立大学の研究者によって使用された。これは、ミシガン・ターミナル・システムを使用するIBMメインフレームコンピューター上で稼働した[17]。このシステムは1998年まで稼動し続けた。
統合型アプローチ
1970年代から1980年代にかけ、ハードウェアとソフトウェアを統合したデータベースシステムの構築が試みられた。その根底にある理念は、このような統合が、より高い性能をより低い費用で提供できるというものである。その例として、IBM System/38、Teradataの初期の製品、およびBritton Lee, Inc.のデータベースマシンがあげられる。
また、データベース管理をハードウェアでサポートするアプローチには、ICLのCAFSアクセラレータという、プログラム可能な検索機能を持つハードウェアディスクコントローラーがあった。しかし、汎用コンピュータの急速な発展と進歩に、データベース専用機が追いつくことができなかったため、長期的にはこれらの取り組みは概して失敗に終わった。こうしたことから、現今のほとんどのデータベースシステムは、汎用ハードウェア上で動作するソフトウェアシステムであり、汎用のコンピュータとデータストレージを使用している。しかし、この着想は今もなお、NetezzaやOracle (Exadata)など一部の企業によって特定の用途で追求されている。
1970年代後半、SQL DBMS
1970年代前半、IBMは、System Rとして、コッドの概念に大まかに基づいたプロトタイプシステムの開発を始めた。最初のバージョンは1974年5月に完成し、その後、レコードを構成するすべての要素(一部はオプション)を単一の大きな「チャンク(chunk、塊)」に格納する必要がないように、データを分割できるマルチテーブルシステムに対応する作業が開始された。その後、1978年と1979年にマルチユーザーバージョンが顧客によってテストされ、その時点では標準化されていたクエリ言語SQLが追加されていた[要出典]。コッドのアイデアは、実行可能でCODASYLよりも優れたものとして確立され、IBMがSQL/DSとして知られるSystem Rの真の製品版、そして後にDatabase 2(IBM Db2)を開発することを後押しした。
ラリー・エリソンのOracle Database(以下、Oracle)は、IBMのSystem Rに関する論文を基に、別の系統から出発した。Oracle V1の実装は1978年に完了したが、エリソンが1979年にIBMを打ち負かしたのはOracle Version 2を市場に投入してからであった[18]。
ストーンブレーカーはその後、INGRESからの教訓を応用して、現在はPostgreSQLとして知られている新しいデータベースPostgresを開発した。PostgreSQLは、大域的で基幹的な業務アプリケーションによく使用されている。(.orgや.infoのドメイン名レジストリでは、多くの大企業や金融機関と同様に、これを主要データストアとして使用している)。
スウェーデンでもコッドの論文は読まれ、1970年代半ばにウプサラ大学でMimer SQLが開発された。1984年、このプロジェクトは独立した企業に統合された。
1976年に登場した実体関係モデルは、それまでのリレーショナルモデルよりも馴染みのある記述法を重視したもう一つのデータモデルであり、データベース設計で人気を博した。その後、実体-関係構造は、リレーショナルモデルのデータモデリング構造として追加され、両者の違いは無意味なものとなった[要出典]。
1980年代、デスクトップ
1980年代は、デスクトップコンピューティングの時代の到来を告げた。新しいコンピュータは、Lotus 1-2-3のような表計算ソフトやdBASEのようなデータベースソフトで、ユーザーに力をもたらした。dBASE製品は軽量で、コンピューターユーザーは誰でも容易に理解できた。dBASEの作者、ウェイン・ラトリフは次のように述べている。「dBASEは、BASIC、C、FORTRAN、COBOLのようなプログラムとは異なり、多くの汚い仕事はすでに行われている。データ操作はユーザーではなくdBASEが行うので、ユーザーはファイルを開き、読み込み、閉じ、スペース割り当ての管理などの汚い詳細に煩わされることなく、自分のしていることに集中することができる」[19]。dBASEは、1980年代から1990年代初頭にかけて、最も売れたソフトウェアの一つであった。
1990年代、オブジェクト指向
1990年代は、オブジェクト指向プログラミングの台頭とともに、さまざまなデータベース内のデータの扱い方で発展が見られた。プログラマーと設計者は、データベース内のデータをオブジェクトとして扱うようになった。つまり、ある個人のデータがデータベース内にある場合、その人の住所、電話番号、年齢などの特性は外来のデータではなく、その人に属するものと考えられるようになった[20]。これにより、データ間の関係は、個々のフィールドではなく、オブジェクトとその属性に関連付けられる。プログラムされたオブジェクトとデータベースのテーブルとの間の変換の不都合は、「オブジェクト-リレーショナル・インピーダンスミスマッチ」という言葉で表わされる。オブジェクト・データベースやオブジェクト・リレーショナルデータベースは、この問題を解決するために、プログラマーが純粋なリレーショナルSQLの代わりに使用できるオブジェクト指向言語(SQLの拡張機能という場合もある)を提供しようとするものである。プログラミング側の立場では、オブジェクト・リレーショナル・マッピング(ORM)と呼ばれるライブラリで、同じ問題を解決しようとしている
2000年代、NoSQLとNewSQL
XMLデータベースは、構造化されたドキュメント指向データベースの一種で、XML文書の属性に基づいたクエリが可能である。XMLデータベースは、たとえば科学論文、特許、税務申告、人事記録など、非常に柔軟なものから非常に厳格なものまで、データをさまざまな構造を持つ文書の集合として見るのに便利なアプリケーションで主に使用される。
NoSQLデータベースは、多くの場合、非常に高速で、固定化したテーブルスキーマを必要とせず、非正規化したデータを格納することで結合操作を回避し、水平スケーリングするように設計されている。
近年、高い分断耐性を備えた大規模分散データベースが強く求められているが、CAP定理によれば、分散システムで一貫性、可用性、分断耐性を同時に備えることは不可能とされている。分散システムは、これら3つの保証のうち、いずれか2つを同時に満たすことはできても、3つすべてを満たすことはできない。そのため、多くのNoSQLデータベースでは、データ整合性のレベルを下げて可用性と分断耐性の両方を保証する、結果整合性という考え方を採用している。
最新のリレーショナルデータベースの一種であるNewSQLは、SQLを使用し、また従来のデータベースシステムのACID保証を維持しながらも、オンライントランザクション処理のワークロード(読み込みと書き込みの両方を伴う)に対して、NoSQLシステムと同じスケーラブルな性能を提供することを目的としている。
使用例
データベースは、組織の内部業務を支援し、顧客や発注先とのオンラインでのやり取りを支えるために使用される(エンタープライズ・ソフトウェアを参照)。
データベースは、業務における管理情報、エンジニアリングデータや経済モデルなどのより専門的なデータを保持するためにも使用される。たとえば、コンピュータによる図書館システム、航空座席予約システム[21]、コンピュータ化された部品在庫管理システム、およびウェブサイトをウェブページの集合としてデータベースに保存する多くのコンテンツ管理システムなどがあげられる。
分類
データベースを分類する方法として、たとえば、書誌、文書、テキスト、統計、マルチメディアなど、その内容の種類によるものがある。第二の方法は、会計、作曲、映画、銀行、製造、保険など、応用面による分類がある。第三の方法は、データベースの構造やインタフェースの種類など、技術的な側面によるものである。この節では、さまざまな種類のデータベースを特徴付けるために使用される用語をいくつか列挙する。
- インメモリデータベースとは、主にメインメモリ内に存在するデータベースで、一般的に不揮発性のコンピューターデータストレージによってバックアップされる。メインメモリーデータベースはディスクデータベースよりも高速であるため、通信ネットワーク機器など、応答時間が重要な場合に使用されることが多い。
- アクティブデータベースは、データベース内外の両方の状況に応答できるイベント駆動型アーキテクチャを備えている。セキュリティ監視、アラート、統計収集、および承認などの用途が考えられる。多くのデータベースは、データベーストリガーという形でアクティブデータベースの機能を提供する。
- クラウドデータベースは、クラウド技術に基づいている。データベースとDBMSの大半はいずれも遠く離れた「クラウド」上に存在するが、アプリケーションはプログラマーが開発し、エンドユーザーがウェブブラウザとオープンAPIを通じてデータベースを保守/利用する。
- データウェアハウスは、業務用データベースや、しばしば市場調査会社などの外部ソースから得たデータをアーカイブする。 データウェアハウスは、業務データにアクセスできない管理者やその他のエンドユーザーが使用するデータの中心的な供給源となる。たとえば、販売データを週ごとの合計に集計し、ACニールセンのデータと比較できるように社内商品コードを統一商品コード(UPC)に変換する。データウェアハウジングの基本的かつ不可欠なコンポーネントには、データの抽出、分析、マイニング、変換、読み込み、そしてデータをさらに利用できるようにするデータ管理がある。
- 演繹データベースは、論理プログラミングとリレーショナルデータベースを組み合わせたものである。
- 分散データベースとは、データとDBMSの両方が複数のコンピュータにまたがったデータベースのことである。
- ドキュメント指向データベースは、ドキュメント指向または半構造化された情報を格納、取得、および管理するために設計されている。ドキュメント指向データベースは、NoSQLデータベースの主要なカテゴリの一つである。
- 組み込みデータベースシステムとは、保存されたデータへのアクセスを要するアプリケーションソフトウェアと緊密に統合されたDBMSで、アプリケーションのエンドユーザーから隠され、継続的なメンテナンスをほとんど(あるいは全く)必要としないものである[22]。
- エンドユーザー・データベースは、個々のエンドユーザーによって開発されたデータから構成されている。たとえば、文書、スプレッドシート、プレゼンテーション、マルチメディア、およびその他のファイルの集合体である。このようなデータベースをサポートするいくつかの製品が存在する。その中には、本格的なDBMSよりもはるかに単純で、基本的なDBMSの機能を備えているものもある。
- 連合データベースシステムは、複数の異なるデータベースから構成され、それぞれは独自のDBMSを持っている。これは連合データベース管理システム (FDBMS) によって単一のデータベースとして扱われ、あるいは複数の自律的なDBMSを透過的に統合し(この場合、異種データベースシステムでもある)、統合された概念ビューを提供するものである。
- マルチデータベースという用語は、連合データベースの同義語として用いられることもあるが、単一のアプリケーション内で連携する、あまり統合されていないデータベースのグループを指す場合もある(例: FDBMSや管理された統合スキーマを持たない)。この場合、一般的にはアトミックコミットプロトコル(ACP、たとえば2フェーズコミットプロトコル)を含むミドルウェアが分散に使われ、参加データベース間での分散(グローバル)トランザクションを可能とする。
- グラフデータベースは、ノード、エッジ、プロパティを持つグラフ構造を用いて情報を表現および保存するデータベースであり、NoSQLデータベースの一種である。任意のグラフを格納できる一般的なグラフデータベースは、トリプルストアやネットワーク型データベースなどの特殊なグラフデータベースとは異なるものとして区別される。
- 配列DBMSは、衛星画像や気候シミュレーションの出力など、(通常は大規模な)多次元配列のモデリング、保存、検索を可能にするNoSQL DBMSの一種である。
- ハイパーテキストまたはハイパーメディア・データベースでは、オブジェクト(例: 別のテキスト、記事、画像、または映画)を表す任意の単語やテキスト部分を、そのオブジェクトにハイパーリンクすることができる。ハイパーテキスト・データベースは、大量にある異種の情報を整理するのに特に有効である。たとえば、ユーザーがテキストの中を簡単に飛び回ることができるオンライン百科事典を整理するのに役立つ。したがって、ワールドワイドウェブは大規模な分散型ハイパーテキストデータベースと言える。
- 知識ベース(KB、kb、またはΔと略す[23][24])は、知識管理のための特別な種類のデータベースであり、コンピュータ化された知識を収集、編成、および検索するための手段を提供するものである。また、問題点とその解決策、あるいは関連する経験などを表すデータの集合でもある。
- モバイルデータベースは、モバイル・コンピューティング・デバイスで実行したり、他のデバイスと同期させたりできる。
- 運用データベースは、組織の運営に関する詳細なデータを格納する。通常、トランザクションを使用して、比較的大量の更新を処理する。たとえば、顧客データベースは、企業の顧客に関する連絡先、信用情報、人口統計情報を記録し、人事データベースは、従業員に関する給与、福利厚生、技能データなどの情報を保持し、企業資源計画システムは、製品の部品、部品在庫、財務に関する詳細を管理し、財務データベースは、組織の収支、会計、および金融取引を監視する。
- 並列データベースは、データのロード、インデックスの作成、クエリの実行などの作業を並列化することで性能向上を図るものである。
- 基盤となるハードウェア・アーキテクチャによって分類される主な並列DBMSアーキテクチャは次のとおりである。
- 共有メモリ・アーキテクチャ: 複数のプロセッサが主記憶領域や他のデータスト レージを共有する。
- 共有ディスク・アーキテクチャ: 各処理装置(通常は複数のプロセッサで構成)は、独自の主記憶領域を持つが、他のストレージは全装置で共有する。
- シェアード・ナッシング・アーキテクチャ: 各処理装置が独自の主記憶領域その他のストレージを持つ。
- 基盤となるハードウェア・アーキテクチャによって分類される主な並列DBMSアーキテクチャは次のとおりである。
- 確率的データベース:ファジィ論理を採用して不正確なデータから推論を引き出す。
- リアルタイムデータベースは、結果が戻ってすぐに処理するのに十分な速度でトランザクションを処理する。
- 空間データベースは、多次元的な特徴を持つデータを格納することができる。このようなデータに対するクエリには、たとえば「私のいる地域で最も近いホテルはどこですか?」というような、位置に基づくクエリが含まれる。
- 時間データベースは、時間データモデルや時間バージョンのSQLなど、時間的な側面が組み込まれている。より具体的には、通常、時間的側面には有効時間とトランザクション時間が含まれる。
- 用語指向データベースは、オブジェクト指向データベースに基づいて構築され、多くの場合、特定の分野向けにカスタマイズされている。
- 非構造化データデータベースは、一般的なデータベースに自然かつ簡単に適合しない多様なオブジェクトを、管理可能かつ保護された方法で格納することを目的としている。これには、電子メールメッセージ、文書、雑誌、マルチメディアオブジェクトなどが含まれることがある。オブジェクトの中には高度に構造化されたものもあるため、この名称は誤解を招く可能性がある。しかし、可能性のあるオブジェクトの集合全体が、あらかじめ定義された構造化フレームワークに適合するものではない。現在、ほとんどの既製のDBMSは、さまざまな方法で非構造化データをサポートしており、新しい専用DBMSも登場している。
データベース管理システム
ConnollyとBeggは、データベース管理システム(DBMS)を「ユーザーがデータベースを定義、作成、保守、およびアクセスを制御できるようにするソフトウェアシステム」と定義している[25]。DBMSの例として、MySQL、PostgreSQL、Microsoft SQL Server、Oracle Database、Microsoft Accessがあげられる。
DBMSの頭文字は、基盤となるデータベースモデルを示して拡張されることがあり、リレーショナル型はRDBMS、オブジェクト(指向)型はOODBMS、オブジェクトリレーショナル型はORDBMSと呼ばれる。また、分散型データベース管理システムを表すDDBMSなど、他の特性を表すように拡張することができる。
DBMSが提供する機能は非常に多様である。中心的な機能は、データの保存、検索、更新である。コッドは、本格的な汎用DBMSが提供すべき機能およびサービスとして、次のようなものを提案した[26]。
- データの保存、検索、更新
- メタデータを記述した、ユーザーがアクセス可能なカタログまたはデータディクショナリ
- トランザクションと並行処理のサポート
- データベースが破損した場合に復旧するための機能
- データへのアクセス時および更新時の承認のサポート
- 遠隔地からのアクセスサポート
- データベース内のデータが特定の規則に従うことを保証するための制約の適用
また、DBMS は、インポート、エクスポート、監視、デフラグメント、分析ユーティリティなど、データベースを効果的に管理するために必要な一連のユーティリティを提供することも、一般に期待されている[27]。データベースとアプリケーション・インタフェースの間で相互作用するDBMSの中心部分は、データベース・エンジンと呼ばれることもある。
多くのDBMSは、データベースが使用できるサーバ上のメインメモリの最大量など、静的または動的に調整可能な構成パラメータを持っている。手動構成する量を最小限に抑える傾向があり、組み込みデータベースのような場合は、ゼロ管理を目標とする要求が最も重要である。
大規模なエンタープライズDBMSでは、サイズや機能が増大する傾向があり、その生涯を通じて数千人年の開発努力が費やされることがある[注釈 1]。
初期のマルチユーザーDBMSでは、一般的に、アプリケーションを同じコンピュータ上で動作させ、コンピュータ端末または端末エミュレーションソフトウェアを通じてアクセスすることしかできなかった。クライアント・サーバー・アーキテクチャは、アプリケーションはクライアントのデスクトップ上にあり、サーバー上に存在するデータベースが処理を分散できるように開発された。これが進化して、アプリケーションサーバーやウェブサーバーを組み込んだ多層アーキテクチャとなり、エンドユーザーインターフェイスはウェブブラウザーを介してアクセスし、データベースは隣接する層に直接接続されるのみとなった[28]。
汎用DBMSは、公開のアプリケーション・プログラミング・インタフェース(API)と、オプションでSQLなどのデータベース言語用のプロセッサを提供して、データベースと対話し操作するアプリケーションを作成できるようにする。特殊用途のDBMSは、プライベートなAPIを使用し、特別にカスタマイズして単一のアプリケーションにリンクされることがある。たとえば、電子メールシステムは、メッセージの挿入、削除、添付ファイルの処理、ブロックリストの検索、メッセージと電子メールアドレスの関連付けなど、汎用DBMSの機能の多くを実行するが、これらの機能は電子メールの処理に必要なものに限定されている。
アプリケーション
データベースとの外部相互作用は、DBMSと接続するアプリケーション・プログラムを介して行われる[29]。アプリケーションは、ユーザーが文字的または視覚的にSQLクエリを実行できるデータベースツールから、情報を格納し検索するためにデータベースを使用するWebサイトまで、多岐にわたる。
アプリケーション・プログラム・インタフェース
プログラマーは、アプリケーション・プログラミング・インタフェース(API)またはデータベース言語を介して、データベース(データソースと呼ばれることもある)との相互対話をコーディングする。選択された特定のAPIや言語は、DBMSによって直接的にサポートされるか、またはプリプロセッサまたはブリッジングAPIを介して間接的にサポートされる必要がある。APIの中にはデータベースに依存しないことを目的とするものもあり、ODBCはそのよく知られた例である。その他の一般的なAPIには、JDBCやADO.NETがある。
データベース言語
データベース言語は、次のような作業を可能とする特殊用途の言語であり、部分言語として区別されることもある。
- データ制御言語(DCL)- データへのアクセスを制御する。
- データ定義言語(DDL)- テーブルの作成、変更、削除などのデータ型の定義や、テーブル間の関係を定義する。
- データ操作言語(DML)- 発生データの挿入、更新、削除などの作業を実行する。
- データ問い合わせ言語(DQL)- 情報を検索し、派生情報を導出できる。
データベース言語は、特定のデータモデルに特化した言語である。著名な例として次のものがある。
- SQLは、データ定義、データ操作、およびクエリ(問い合わせ)の役割を1つの言語で兼ね備えたものである。SQLは、コッドによって説明されたリレーショナルモデルとはからいくつかの点で異なっているが(たとえば、テーブルの行と列を並び替えることができる)、リレーショナルモデルの最初の商用言語の1つである。SQLは1986年に米国規格協会(ANSI)標準となり、1987年に国際標準化機構(ISO)標準となった。この標準はそれ以降も定期的に強化されており、すべての主流の商用リレーショナルDBMSによってサポートされている(適合性の程度はさまざまである)[30][31]。
- OQLは、オブジェクトモデル言語標準である(Object Data Management Groupによる)。これは、JDOQLやEJB QLなどの新しいクエリ言語の設計に影響を与えている。
- XQueryは、MarkLogicやeXistなどのXMLデータベースシステム、OracleやDb2などのXML機能を備えたリレーショナルデータベース、およびSaxonなどのインメモリXMLプロセッサで実装された標準のXMLクエリ言語である。
- SQL/XMLは、XQueryとSQLを組み合わせたものである[32]。
データベース言語には、次のような機能を組み込んでいるものもある。
- DBMS固有の構成やストレージエンジンの管理。
- クエリ結果を変更するための計算。たとえば、カウント、合計、平均、並び替え、グループ化、クロスリファレンス。
- 制約の適用(例: 自動車データベースでは、1台の車ごとに1種類のエンジンのみ許可される)。
- プログラマーの便宜のために、クエリ言語のアプリケーション・プログラミング・インターフェース版。
ストレージ
データベースストレージは、データベースの物理的な実体の格納庫である。これは、データベースアーキテクチャの「内部(物理)レベル」を構成する。また、必要に応じて「内部レベル」から「概念レベル」や「外部レベル」を再構築するために必要なすべての情報(たとえばメタデータ、「データに関するデータ」、内部データ構造など)も含んでいる。デジタル・オブジェクトとしてのデータベースには、データ、構造、セマンティクス(意味)の3つの層からなる情報が含まれ、保存する必要がある。長期間に渡ってデータベースを保存し、長持ちさせるために、3つの層すべてを適切に保存する必要がある[33]。データを永続的ストレージに保存するのは、一般に、データベースエンジン(別名「ストレージエンジン」)の責任である。DBMSは通常、基盤となるオペレーティングシステムを通じてアクセスするが(多くの場合、オペレーティングシステムのファイルシステムを、ストレージ配置の仲介役として使用する)、ストレージの特性と構成設定はDBMSの効率的な運用に極めて重要であるため、データベース管理者によって密接に管理される。DBMSは、その運用中に、常に数種類のストレージ(メモリや外部ストレージ)にデータベースを常駐させている。データベースのデータと、追加の必要な情報(おそらく非常に大量にある)は、ビット列に符号化される。データは通常、概念レベルや外部レベルでの見え方とは全く異なる構造でストレージ内に存在するが、ユーザーやプログラムが必要とするとき、または必要な情報の追加形式をデータから計算するとき(例: データベースに問い合わせる時)、これらのレベルの再構築を(可能な限り)最適化するような方法で格納される。
DBMSの中には、データの格納に用いる文字エンコーディングを指定できるものがあり、同じデータベースで複数のエンコーディングを使用することができる。
データモデルをシリアル化し、選ばれた媒体に書き込めるようにするために、ストレージエンジンは、さまざまな低レベルのデータベースストレージ構造を使用する。性能を向上させるために、インデックス作成などの手法を使用することもある。従来のストレージは行指向であるが、列指向データベースや相関データベース (en:英語版) もある。
マテリアライズド・ビュー
性能を向上させるためにストレージを冗長化することがよくある。一般的な例は、頻繁に必要とされる外部ビュー(external view)や、クエリ結果から構成されるマテリアライズド・ビュー(materialized view)の保存である。このようなビューを保存することで、必要になるたびに計算する費用を節約することができる。マテリアライズド・ビューの欠点は、元の更新されたデータベースデータと同期を維持するためにビューを更新する際に発生するオーバーヘッドと、ストレージの冗長化にかかる費用である。
レプリケーション
データベースは、データの可用性を向上させるために、データベース・オブジェクトの複製(1つ以上のレプリケーション)によるストレージ冗長性を採用することがある。これによって、同じデータベース・オブジェクトに複数のエンドユーザーが同時アクセスした場合の性能を向上させ、また、分散データベースに部分的な障害が発生した場合の回復力を提供する。複製されたオブジェクトの更新には、オブジェクトのコピー間で同期される必要がある。多くの場合、データベース全体が複製される。
セキュリティ
データベース・セキュリティは、データベースの内容、その所有者、およびそのユーザーを保護するためのあらゆる側面を扱う。その範囲は、意図的な不正なデータベースの使用から、権限のないエンティティ(たとえば、人やコンピュータプログラムなど)による意図しないデータベースへのアクセスまで、さまざまな保護に及ぶ。
データベースアクセス制御は、データベース内のどの情報に誰が(人間または特定のコンピュータプログラム)アクセスを許可されるかを制御することを扱う。その情報には、特定のデータベースオブジェクト(例: レコード種類、特定レコード、データ構造)、特定のオブジェクトに対する特定の計算(例: クエリ種類、特定のクエリ)、または前者に対する特定のアクセス経路の使用(例: 情報にアクセスするために特定のインデックスまたは他のデータ構造の使用)が含まれる。データベースのアクセス制御は、データベース所有者から特別に許可された人員によって、保護された専用のセキュリティDBMSインタフェースを用いて設定される。
アクセス制御の管理は、個人別に直接行うことも、個人と特権をグループに割り当てることも、(最も精巧なモデルでは)個人やグループにロール(役割)を割り当ててからロールに権限を付与することもできる。データセキュリティは、権限のないユーザーによるデータベースの閲覧や更新を阻止する。パスワードを使用すると、ユーザーはデータベース全体、または「サブスキーマ」と呼ばれる一部分へのアクセスを許可される。たとえば、従業員データベースには個々の従業員に関するすべてのデータを含めていても、あるグループのユーザーには給与データのみの閲覧を許可し、別のグループには職歴と医療データのみアクセスを許可することが可能である。DBMSがデータベースの入力、更新、問い合わせを対話的に行う方法を提供している場合、この機能によって個人データベースを管理することができる。
一般にデータセキュリティは、特定のデータチャンク(data chunk、塊)を物理的に保護すること(すなわち破損、破壊、削除から。物理的セキュリティを参照)、または、データチャンクやその一部を意味のある情報に変換すること(例: それらが構成するビット列を見て、特定の有効なクレジットカード番号を決定する。データ暗号化を参照)の両方を扱う。
変更およびアクセスのロギングは、誰がどの属性にアクセスしたか、何が変更されたか、そしていつ変更されたかを記録する。ロギングサービスは、アクセスの発生や変更の記録を保持することで、後でフォレンジックデータベース監査を行うことを可能にする。場合によっては、データベースレベルで記録するのではなく、アプリケーションレベルのコードで変更を記録することもある。セキュリティ違反の検出を試みるために監視を設定することもできる。データベース・セキュリティには多くの利点があるため、組織はこれに真剣に取り組む必要がある。組織は、ファイアウォール内への侵入、ウィルスの蔓延、ランサムウェアなどのセキュリティ違反やハッキング行為から守られる。これは、企業において、いかなる理由があっても部外者と共有することが許されない、重要な情報を保護するために役に立つ[34]。
トランザクションと同時平行
データベース・トランザクションは、クラッシュ(障害)からの復旧後に、ある程度の耐障害性とデータ完全性を導入するために使用することができる。データベーストランザクションは通常、データベースに対する一連の操作(データベースオブジェクトの読み込み、書き込み、ロックの取得や解放など)をカプセル化した作業の単位であり、データベースやその他のシステムでサポートされている抽象概念である。各トランザクションには、どのプログラム/コードの実行がそのトランザクションに含まれるかという点で、明確に定義された境界がある(トランザクションの設計者が、特別なトランザクションコマンドで決定する)。
ACIDという頭字語は、データベーストランザクションの理想的な特性である、原子性(atomicity)、一貫性(consistency)、分離性(isolation)、永続性(durability)を表している。
移行
あるDBMSで構築されたデータベースは、別のDBMSに移植できない(つまり、別のDBMSでは実行できない)。しかし、状況によっては、あるDBMSから別のDBMSにデータベースを移行(database migration)するのが望ましい場合がある。その理由は、主に経済的(DBMS によって総所有コスト(TCO)が異なる)、機能的、および運用的(DBMSによって機能が異なることがある)である。移行には、あるDBMSの種類から別の種類へデータベースを変換することも含まれる。この変換では、(可能であれば)データベース関連のアプリケーション(つまり、関連するすべてのアプリケーションプログラム)をそのまま維持する必要がある。したがって、データベースの概念レベルおよび外部レベルのアーキテクチャは、変換時に維持する必要がある。また、アーキテクチャの内部レベルのいくつかの側面も維持されることが望まれる場合もある。複雑または大規模なデータベースの移行は、それ自体が複雑で費用のかかる(1度きりの)プロジェクトになる可能性があるので、移行を決定するときはその点を考慮する必要がある。これは、特定のDBMS間の移行を支援するツールが存在する可能性があるのにも関わらない。一般に、DBMSベンダーは、他の普及しているDBMSからデータベースをインポートするツールを提供している。
構築、保守、およびチューニング
アプリケーションのデータベースを設計したら、次の段階はデータベースの構築である。通常、この用途で用いるために、適切な汎用DBMSを選択することができる。DBMSは、データベース管理者が必要なアプリケーションのデータ構造をDBMSの各データモデルに準じて定義するために必要なユーザーインタフェースを提供する。その他のユーザーインタフェースは、必要なDBMSパラメータ(セキュリティ関連、ストレージ割り当てパラメータなど)を選択するために用いられる。
データベースの準備が整うと(データ構造およびその他の必要なコンポーネントがすべて定義される)、通常は、運用を開始する前にアプリケーションの初期データを入力する(データベースの初期化は、通常は別プロジェクトとされ、多くの場合、一括挿入をサポートする専用のDBMSインタフェースを用いる)。場合によっては、アプリケーションのデータを持たない状態でデータベースが稼働し、その運用を経てデータが蓄積されることもある。
データベースを作成し、初期化し、データを入力した後は、データベースを維持する必要がある。たとえば、より良い性能を得るために、さまざまなデータベース・パラメータを変更し、データベースをチューニングする必要があるかもしれない。あるいは、アプリケーションの機能を追加するために、アプリケーションのデータ構造を変更または追加し、新しい関連アプリケーションプログラムを作成するかもしれない。
バックアップと復元
場合によっては、データベースを以前の状態に戻すことが必要となる(たとえばソフトウェアの誤りが原因でデータベースが破損していることが判明した場合や、誤ったデータで更新された場合など、さまざまな理由が考えられる)。そのために、バックアップ操作が時々または継続的に実施され、それぞれの望ましいデータベースの状態(すなわち、データ値とデータベースのデータ構造への埋め込み)が専用のバックアップファイルに保持される(これを効果的に行うための多くの技術が存在する)。データベース管理者がデータベースをこの状態に戻すと決めたとき(たとえば、データベースがこの状態にあった時、所望の時点を指定する)、これらのファイルをその状態を復元するために使用する。
静的解析
ソフトウェア検証のための静的解析技術は、クエリ言語の領域にも適用することができる。特に、抽象解釈フレームワークは、適切な近似技術をサポートする方法として、リレーショナルデータベースのクエリ言語の分野に拡張されている[35]。クエリ言語のセマンティクスは、データの具体的な領域(ドメイン)を適切に抽象化することによって調整することができる。リレーショナルデータベースシステムの抽象化は、特に、細粒度アクセス制御や、電子透かしなどのセキュリティ分野で、多くの興味深い応用がある。
その他の機能
DBMSのその他の機能として、次のようなものもあげられる。
- データベースログ - これは実行された機能の履歴を残すのに役立つ。
- グラフィックコンポーネント - 特にデータウェアハウスシステムで、グラフやチャートを作成するためのもの。
- クエリオプティマイザ - すべてのクエリに対してクエリを最適化し、クエリ結果を効率的に得るための実行計画(手順の部分的な順序(ツリー))を選択する。特定のストレージエンジンに特化することもある。
- データベース設計、アプリケーションプログラミング、アプリケーションプログラムの保守、データベース性能分析および監視、データベース構成監視、DBMSハードウェア構成(DBMSや関連データベースはコンピュータ、ネットワーク、ストレージ装置にまたがる場合がある)および関連するデータベースマッピング(特に分散DBMS)、ストレージ割り当てとデータベースレイアウトの監視、ストレージ移行のためのツールまたはフック。
データベース管理とソース管理のために、ビルド、テスト、デプロイメントフレームワークに、これらの中心機能をすべて組み込んだ単一システムを求める声はますます高まっている。ソフトウェア業界における別の進化を借りて、そうした製品を「データベース用DevOps」として提供する企業もある[36]。
設計とモデリング
データベース設計者の最初の作業は概念データモデル (en:英語版) の作成で、データベースに保持する情報の構造を反映する。そのための一般的な方法は、描画ツールを用いて実体関連モデルを作成することが多い。統一モデリング言語(UML)の使用は、もう一つのよく知られた方法である。出来のよいデータモデルは、モデル化される外界の可能な状態を正確に反映する。たとえば、人々が複数の電話番号を持つことができる場合、その情報を取得することが可能となる。優れた概念データモデルを設計するには、アプリケーションの領域を十分に理解する必要がある。それには、一般的に、組織が関心を持っていることについて深い問いを立てる必要がある。たとえば「顧客は発注先にもなり得るのか?」、あるいは「ある製品が2種類の包装形態で販売されている場合、それらは同じ製品か、それとも異なる製品なのか?」、あるいは「飛行機がニューヨークからフランクフルト経由でドバイまで飛ぶ場合、それは1便か2便か(または3便か)?」のような質問をする。これらの質問に対する回答によって、エンティティ(顧客、製品、フライト、フライト区間)に使用される用語の定義、およびそれらの関係や属性を確立する。
概念データモデルを作成する過程で、ビジネスプロセスからの入力や、組織内のワークフロー分析からの入力が必要な場合がある。これによって、データベースにどのような情報が必要で、何を省略できるかを特定することができる。たとえば、データベースに現在のデータだけでなく、過去の履歴データも保持する必要があるかどうかを決定するのに役立つ。
ユーザーが満足できる概念データモデルを作成したら、次の段階では、これをデータベース内の関連データ構造を実装するスキーマに変換する必要がある。この過程は、しばしば論理データベース設計と呼ばれ、スキーマの形で表現された論理データモデルを作成する。概念データモデルがデータベース技術の選択と関係しないのに対し(少なくとも理論的には)、論理データモデルは、選択したDBMSがサポートする特定のデータベースモデルの観点で表現される。(データモデルとデータベースモデルという用語はしばしば同じ意味で用いられるが、この記事では特定のデータベースの設計を「データモデル」、その設計を表現するために用いられるモデリング表記を「データベースモデル」とそれぞれ呼ぶ。)
汎用データベースで最も普及しているデータベースモデルはリレーショナルモデル、より正確には、SQL言語で表現されるリレーショナルモデルである。このモデルを用いて論理データベースを設計する過程では、正規化と呼ばれる系統的アプローチが用いられる。正規化の目的は、挿入、更新、削除の一貫性を自然に維持することで、おのおのの基本的「事実」を一箇所にのみ記録することでなされる。
データベース設計の最終段階では、特定のDBMSに依存する性能、スケーラビリティ、回復、セキュリティなどに影響する決定をする。これはしばしば「物理データベース設計」と呼ばれ、物理データモデルを作成する。この段階での重要な目標はデータの独立性である。これは、性能を最適化するために行われた決定を、エンドユーザーやアプリケーションから見えないようにすることを意味する。データの独立性には2つのタイプがあり、物理的なデータ独立性と論理的なデータ独立性である。物理設計は主に性能要件によって推進され、予想される作業負荷とアクセスパターンに関する十分な知識と、選択したDBMSが持つ機能についての深い理解を必要とする。
物理データベース設計のもうひとつの側面はセキュリティである。これには、データベースオブジェクトへのアクセス制御を定義することと、データ自体のセキュリティレベルとメソッド(手順)の定義の両方を含んでいる。
モデル
データベースモデルとは、データベースの論理構造を決定するデータモデルの一種で、データをどのように格納、整理、操作するかの根本を規定するものである。データベースモデルの最も一般的な例は、テーブルベースの形式を使用するリレーショナルモデル(またはリレーションを近似したSQL)である。
データベースの一般的な論理データモデルを次にあげる。
オブジェクトリレーショナルデータベースは、この2つの関連する構造を組み合わせたものである。
物理データモデルを次にあげる。
その他、次のようなモデルがある。
特定の種類のデータ用に最適化された特殊モデルがある。
外部、概念、内部ビュー
データベース管理システムは、データベースのデータに対して三層のビューを提供する。[注釈 2]
- 外部レベル(external level)では、エンドユーザーの各グループがデータベース内のデータ構成をどのように見るかを定義する。1つのデータベースは、外部レベルで任意の数のビューを持つことができる。
- 概念レベル(conceptual level)では、さまざまな外部レベルのビューを、適合性のある単一の大域的ビューに統一化する[38]。概念レベルのビューは、すべての外部ビューを組み立てる。それは、データベースのさまざまなエンドユーザーの範囲外であり、むしろデータベースアプリケーション開発者やデータベース管理者にとって興味対象である。
- 内部レベル(internal level)または物理レベル(physical level)とは、DBMS内におけるデータの内部編成のことである。これは費用、性能、スケーラビリティ、その他の運用上の事項に関与している。このレベルでは、データの記憶領域配置を扱い、性能を向上させるためにインデックス(索引)などの格納構造を用いる。冗長性に対する性能上の正当性が認められる場合は、一般的なデータから計算された個々のビュー(マテリアライズド・ビュー)のデータを格納することもある。すべての活動において、全体的な性能を最適化するために、すべての外部ビューの性能要件(競合する可能性のある)の間でバランスをとる。
データの概念ビュー(または論理ビュー)および物理ビュー(または内部ビュー)は、通常、1つしかないが、さまざまな外部ビューはいくつでも存在することができる。これにより、ユーザーは、技術的あるいは処理的な視点からではなく、よりビジネスに関連した視点からデータベース情報を見ることができるようになる。たとえば、企業の財務部門は会社の経費の一部として全従業員の支払明細を必要とするが、人事部門の関心事である従業員に関する明細は必要ない。このように、部門によって、企業データベースには異なるビューが必要となる。
三層データベース・アーキテクチャは、リレーショナルモデルの主要な初期推進力の1つであったデータの独立性の概念に関連している。この考え方は、あるレベルで行われた変更は、より高いレベルのビューに影響を与えないというものである。たとえば、内部レベルの変更は、概念レベルのインタフェースを使用して記述されたアプリケーションプログラムには影響しないので、性能を向上させるために物理的変更を加えてもその影響を軽減することができる。
概念ビューは、内部ビューと外部ビューの間に間接的なレベルを提供する。一方では、異なる外部ビュー構造に依存しないデータベースの共通ビューを提供し、また他方では、データがどのように格納され管理されるかという詳細(内部レベル)を抽象化する。原則として、すべてのレベルの、さらにはすべての外部ビューは、異なるデータモデルで表現することができる。実際には通常、特定のDBMSは外部レベルと概念レベルの両方で同じデータモデルを使用する(例: リレーショナルモデル)。内部レベルは特定のDBMSの内側に隠されており、(その実装にも依存するが)異なるレベルの詳細が要求され、独自の種類のデータ構造型が用いられる。
外部、概念、および内部レベルを分離することは、21世紀のデータベースを支配するリレーショナルデータベースモデルの実装における大きな特徴であった[38]。
研究
データベース技術は、1960年代から、学界や企業の研究開発グループ(例: IBM基礎研究所)の両方で活発な研究課題となっている。研究活動には、理論やプロトタイプの開発が含まれる。注目すべき研究課題には、モデル、アトミックトランザクションの概念、関連する並行性制御技術、クエリ言語とクエリ最適化手法、RAIDがある。
データベース研究分野には、いくつかの専門学術誌や(例: ACM Transactions on Database Systems-TODS、Data and Knowledge Engineering-DKE)、年次会議(例: ACM SIGMOD、ACM PODS、VLDB、IEEE ICDE)がある。
日本の学会としては、日本データベース学会があげられる。
参照項目
ノート
- ^ この記事では、DB2リリース9単独で750人が関与した5年間の開発期間を引用している。(Chong et al. 2007)
- ^ 3層の分け方はいくつかの種類があり、次の説明は、外部-概念-内部の3層に分けているが、他にも概念-論理-物理の3層に分けた説明もある。
脚注
出典
- ^ Ullman & Widom 1997, p. 1.
- ^ “Update – Definition of update by Merriam-Webster”. merriam-webster.com. 2022年8月14日閲覧。
- ^ “Retrieval – Definition of retrieval by Merriam-Webster”. merriam-webster.com. 2022年8月14日閲覧。
- ^ “Administration – Definition of administration by Merriam-Webster”. merriam-webster.com. 2022年8月14日閲覧。
- ^ Tsitchizris & Lochovsky 1982.
- ^ Beynon-Davies 2003.
- ^ Nelson & Nelson 2001.
- ^ Bachman 1973.
- ^ “TOPDB Top Database index”. pypl.github.io. 2022年7月16日閲覧。
- ^ “database, n”. OED Online. Oxford University Press (June 2013). July 12, 2013閲覧。 (要購読契約)
- ^ IBM Corporation (October 2013). “IBM Information Management System (IMS) 13 Transaction and Database Servers delivers high performance and low total cost of ownership”. Feb 20, 2014閲覧。
- ^ Codd 1970.
- ^ Hershey & Easthope 1972.
- ^ North 2010.
- ^ Childs 1968a.
- ^ Childs 1968b.
- ^ M.A. Kahn; D.L. Rumelhart; B.L. Bronson (October 1977). MICRO Information Management System (Version 5.0) Reference Manual. Institute of Labor and Industrial Relations (ILIR), University of Michigan and Wayne State University
- ^ “Oracle 30th Anniversary Timeline”. 23 August 2017閲覧。
- ^ Interview with Wayne Ratliff. The FoxPro History. Retrieved on 2013-07-12.
- ^ Development of an object-oriented DBMS; Portland, Oregon, United States; Pages: 472–482; 1986; ISBN 0-89791-204-7
- ^ 斎藤, 謙一郎「航空予約システムとその動向」『電気学会誌』第123巻第6号、2003年、352頁、doi:10.1541/ieejjournal.123.349、ISSN 1881-4190。
- ^ Graves, Steve. "COTS Databases For Embedded Systems" Archived 2007-11-14 at the Wayback Machine., Embedded Computing Design magazine, January 2007. Retrieved on August 13, 2008.
- ^ Argumentation in Artificial Intelligence by Iyad Rahwan, Guillermo R. Simari
- ^ “OWL DL Semantics”. 10 December 2010閲覧。
- ^ Connolly & Begg 2014, p. 64.
- ^ Connolly & Begg 2014, pp. 97–102.
- ^ Connolly & Begg 2014, p. 102.
- ^ Connolly & Begg 2014, pp. 106–113.
- ^ Connolly & Begg 2014, p. 65.
- ^ Chapple 2005.
- ^ “Structured Query Language (SQL)”. International Business Machines (October 27, 2006). 2007年6月10日閲覧。
- ^ Wagner 2010.
- ^ Ramalho, José Carlos; Faria, Luis; Silva, Hélder; Coutada, Miguel (2014). Database Preservation Toolkit: a flexible tool to normalize and give access to databases. Biblioteca Nacional de Portugal (BNP). hdl:1822/35183. ISBN 978-972-565-541-2 .
- ^ David Y. Chan; Victoria Chiu; Miklos A. Vasarhelyi (2018). Continuous auditing : theory and application (1st ed.). Bingley, UK. ISBN 978-1-78743-413-4. OCLC 1029759767
- ^ Halder & Cortesi 2011.
- ^ Ben Linders (January 28, 2016). “How Database Administration Fits into DevOps”. April 15, 2017閲覧。
- ^ a b itl.nist.gov (1993) Integration Definition for Information Modeling (IDEFIX) Archived 2013-12-03 at the Wayback Machine.. 21 December 1993.
- ^ a b Date 2003, pp. 31–32.
出典
- Bachman, Charles W. (1973). “The Programmer as Navigator”. Communications of the ACM 16 (11): 653–658. doi:10.1145/355611.362534.
- Beynon-Davies, Paul (2003). Database Systems (3rd ed.). Palgrave Macmillan. ISBN 978-1403916013
- “SQL Fundamentals”. Databases. About.com (2005年). 22 February 2009時点のオリジナルよりアーカイブ。28 January 2009閲覧。
- Childs, David L. (1968a). Description of a set-theoretic data structure (PDF) (Technical report). CONCOMP (Research in Conversational Use of Computers) Project. University of Michigan. Technical Report 3。
- Childs, David L. (1968b). Feasibility of a set-theoretic data structure: a general structure based on a reconstituted definition (PDF) (Technical report). CONCOMP (Research in Conversational Use of Computers) Project. University of Michigan. Technical Report 6。
- Chong, Raul F.; Wang, Xiaomei; Dang, Michael; Snow, Dwaine R. (2007). “Introduction to DB2”. Understanding DB2: Learning Visually with Examples (2nd ed.). ISBN 978-0131580183 17 March 2013閲覧。
- Codd, Edgar F. (1970). “A Relational Model of Data for Large Shared Data Banks”. Communications of the ACM 13 (6): 377–387. doi:10.1145/362384.362685 .
- Connolly, Thomas M.; Begg, Carolyn E. (2014). Database Systems – A Practical Approach to Design Implementation and Management (6th ed.). Pearson. ISBN 978-1292061184
- Date, C. J. (2003). An Introduction to Database Systems (8th ed.). Pearson. ISBN 978-0321197849
- Halder, Raju; Cortesi, Agostino (2011). “Abstract Interpretation of Database Query Languages”. Computer Languages, Systems & Structures 38 (2): 123–157. doi:10.1016/j.cl.2011.10.004. ISSN 1477-8424 .
- Hershey, William; Easthope, Carol (1972). A set theoretic data structure and retrieval language. Spring Joint Computer Conference, May 1972. ACM SIGIR Forum. Vol. 7, no. 4. pp. 45–55. doi:10.1145/1095495.1095500。
- Nelson, Anne Fulcher; Nelson, William Harris Morehead (2001). Building Electronic Commerce: With Web Database Constructions. Prentice Hall. ISBN 978-0201741308
- North, Ken (10 March 2010). “Sets, Data Models and Data Independence”. Dr. Dobb's. オリジナルの24 October 2010時点におけるアーカイブ。 .
- Tsitchizris, Dionysios C.; Lochovsky, Fred H. (1982). Data Models. Prentice–Hall. ISBN 978-0131964280
- Ullman, Jeffrey; Widom, Jennifer (1997). A First Course in Database Systems. Prentice–Hall. ISBN 978-0138613372
- Wagner, Michael (2010), SQL/XML:2006 – Evaluierung der Standardkonformität ausgewählter Datenbanksysteme, Diplomica Verlag, ISBN 978-3836696098
推薦文献
- 増永良文『データベース入門 [第2版]』サイエンス社、2021年2月10日。ISBN 978-4-7819-1500-5。
- 増永良文『リレーショナルデータベース入門 [第3版]』サイエンス社、2017年2月。ISBN 978-4-7819-1390-2。
- Ling Liu and Tamer M. Özsu (Eds.) (2009). "Encyclopedia of Database Systems, 4100 p. 60 illus. ISBN 978-0-387-49616-0.
- Gray, J. and Reuter, A. Transaction Processing: Concepts and Techniques, 1st edition, Morgan Kaufmann Publishers, 1992.
- Kroenke, David M. and David J. Auer. Database Concepts. 3rd ed. New York: Prentice, 2007.
- Raghu Ramakrishnan and Johannes Gehrke, Database Management Systems
- Abraham Silberschatz, Henry F. Korth, S. Sudarshan, Database System Concepts
- Lightstone, S.; Teorey, T.; Nadeau, T. (2007). Physical Database Design: the database professional's guide to exploiting indexes, views, storage, and more. Morgan Kaufmann Press. ISBN 978-0-12-369389-1
- Teorey, T.; Lightstone, S. and Nadeau, T. Database Modeling & Design: Logical Design, 4th edition, Morgan Kaufmann Press, 2005. ISBN 0-12-685352-5
外部リンク
- DB File extension - DB拡張子を持つファイルに関する情報