データベース
目次
応用情報技術者試験(レベル3)シラバス-情報処理技術者試験における知識・技能の細目- Ver.6.1 に基づき,「データベース」の対策ノートを作成した。
本稿は,システムアーキテクト試験 午前Ⅱ 問題の対策としても活用できるようにしている。
データベース方式
- データベースの種類,特徴,データベースのモデル,3 層スキーマの考え方を修得し,応用する。
- データベース管理システムの目的,機能を修得し,応用する。
(1) データベース
① データベースの種類と特徴
関係データベース(リレーショナルデータベース,RDB : relational database)
関係データベース(リレーショナルデータベース)とは、データベースの構造の一つで、一件のデータを複数の属性の値の組として表現し、組を列挙することでデータを格納していく方式。属性を列、組を行とする表(テーブル)の形で示されることが多い。最も普及している方式で、単にデータベースといった場合は関係データベースであることが多い。
リレーショナル(relational)とは「関係のある」という意味である。行と列のある表(テーブル)の形式で表され,テーブルとテーブルが結びつけられている(リレーショナル)ことが特徴である。
構造型データベース(Structural Databese)
データを構造化によりモデル化したもので、「階層型データベース」と「網型データベース」の総称である。
HDB(Hierarchical Database : 階層型データベース)
最も初期に出現したデータベースで、木構造データベースともいう。すべて親子関係になっている。階層の上位から下位に節点をたどることによって,データを取り出すことができる構造である。この考え方は、二分木としてデータの整列や検索などに用いられているが、データベースとしては用いられていない。

NDB(Network Database : 網型データベース)
親となるものが複数ある場合にも取り扱うことができる。1980 年頃まで汎用コンピュータで広く用いられていたが,関係データベースの性能が向上したことにより,現在ではあまり使われていない。

CODASYL(Conference on Data Systems Languages)型データベース
米政府主催で,情報システムに用いる標準言語を策定する委員会 CODASYL により制定されている網型データベース用のデータベース言語 NDL を用いるデータベース。
OODB(Object Oriented Database : オブジェクト指向データベース)
オブジェクト指向データベースは,「オブジェクト」という単位でデータを格納するデータベースである。オブジェクト指向は,1990 年代に Java をはじめとするオブジェクト指向プログラミング言語で注目され,その後広く普及した。
ハイパーテキストデータベース
複数の文書をそれぞれリンクさせた形で持たせたデータベースである。データの中で意味のあるテキスト同士をリンクによって,複雑な関係を整理したデータベースである。
マルチメディアデータベース
静止画,動画,音楽などのマルチメディアデータを管理するデータベースである。メディアのデータ構造を意識することなく,統一させたユーザインターフェースを提供するため,オブジェクト指向のアプローチを取ることが多い。
XML データベース
XML 文書をタグによりデータの構造と意味を表し,階層構造データベースとしたものである。XML データベースは,XML の操作に特化したデータベースであり,SQL ではなく Xpath/XQuery による操作を行う。
組込みデータベース
組込みシステムに特有の制約・設計思想に基づいたデータベース管理システム(DBMS)のことである。一般的には,厳しいリソース制約上での稼働,ゼロアドミニストレーション,高い信頼性,リアルタイム性などが特長として挙げられる。
組込みデータベースは,しばしばその仕組みから大きく 2 つの種類に分類される。一つはインプロセスデータベース(ライブラリ型データベース),もう一つはクライアント・サーバー型データベースである。
インプロセスデータベースは,ライブラリ形式で提供され,アプリケーションプログラムとリンクされて同一メモリ空間で動作する。
クライアント・サーバ型データベースは,いわゆるエンタープライズ系 DBMS がそうであるように,DB プロセスがアプリケーションプロセスから独立して DB サーバとして起動しており,複数処理の同時実行や複数のアプリケーションからの DB アクセスに対応できる。
② データベースの 3 層スキーマアーキテクチャ(3 層スキーマ構造)
データベース定義では,データベースの構造やデータの格納形式を定義する。これを「スキーマ」と呼び,ANSI により標準化された ANSI/SPARC 3 層スキーマがある。
- 概念スキーマ
- データベース化対象の業務とデータの内容を論理的な構造として記述したもの。テーブルの正規化や CREATE TABLE による表定義が概念スキーマに相当する。
- 外部スキーマ(副スキーマ)
- データの利用者からの見方を記述したもの。SQL のビューが外部スキーマに該当する。
- 内部スキーマ(記憶スキーマ)
- データを記憶装置上にどのような形式で格納するかを記述したもの。ファイル編成やインデックスの設定などが内部スキーマに相当する。
スキーマの定義や定義したデータの参照は,データベース言語で行う。代表的な言語としては,SQL や NDL がある。
- スキーマ(schema)とは,形式,一定の様式,枠組みである。
③ データベースのデータモデル
論理設計における代表的なデータモデルは,次表に示す 3 種類がある。
モデル | 特徴 |
---|---|
階層型 | データの構造を木構造で表現するデータモデル。1 つの親レコードに対して,子レコードは複数存在できる。 |
網型 | 階層型において,子レコードが複数の親レコードを持てるデータモデル。 |
関係 | データを 2 次元の表形式で表したデータモデル。表間のリンクは,表中の列の値を用いて関連付ける。 |
論理データモデル作成におけるトップダウンアプローチでもボトムアップアプローチでも,最終的な論理データモデルは正規化され,かつ,業務上の属性はすべて揃えていなければならない。
階層モデル
階層型データモデルを下図に示す。

ネットワークモデル(網モデル)
ネットワークモデル(網モデル)を下図に示す。

④ 関係モデル
関係演算は,関係データモデル特有の演算である。各演算の内容を下表に示す。
演算 | 内容 |
---|---|
選択 (selection) |
表の中から特定の条件に合った行を取り出し,新しい表を作る |
射影 (projection) |
表の中から特定の列を取り出して,新しい表を作る |
結合 (join) |
2 つの表で共通に持つ属性(結合列)同士で結合し合い,新しい表を作る 等結合:結合した表には双方の結合列が重複して含まれる 自然結合:結合した表には片方の結合列のみが含まれる |
商 (division) |
表 A から表 B の各行の属性をすべて含む行を取り出す,さらに表 B の属性を取り除いた新しい表を作る |
(2) データベース管理システム
データベース管理システムとは,データベースを管理し、外部のソフトウェアからの要求に応えてデータベースの操作を行う専門のソフトウェアである。
企業の情報システムでデータの記録・管理を行う中核的なソフトウェアとして広く普及しており、大規模システム向けの高機能、高性能、高額な商用ソフトウェア製品が多い。中でも Oracle(オラクル)社の Oracle Database や Microsoft(マイクロソフト)社の SQL Server、IBM 社の DB2 などが高いシェアを獲得している。オープンソースソフトウェアとして無償で公開されているものもあり、PostgreSQL や Oracle 社の MySQL などが広く使われている。
① データベース管理システムの目的
データベース定義機能
データベースの構造やデータの格納形式を 3 つの枠組み(スキーマ)として定義する。
- 外部スキーマ
- 概念スキーマ
- 内部スキーマ
データベース操作機能
データベースへの操作(登録,読出し,更新,削除)をデータベース言語を用いて行う。
ストアドプロシージャ(stored procedure)は、データベースに対する一連の処理をまとめた手続きにして、データベース管理システムに保存したものである。利用者は通常のクエリを発行する代わりに、データベース管理システム内の手続きを呼び出すことによって目的の処理を実行させることができる。一つの要求で複数の SQL 文を実行させることができるのでネットワーク負荷の軽減に繋がったり、誰もがあらかじめ保存された定型処理を行うことになるため標準化ができるなどのメリットがある
オプティマイザ
オプティマイザ(optimizer)は、SQL 文が実行された際、対象となるレコードの取得時間を最小とするようにアクセスパスを最適化するデータベース管理システム(DBMS)の機能である。レコードを取得するためには、インデックスの使用や表全体の読込みなどの複数の方法が考えられる。オプティマイザはクエリの実行計画を評価し、問合せ内容に応じて最も効率がよい方法を選択する。
なお,アクセスパスを選択する基準には「コストベースアプローチ」と「ルールベースアプローチ」がある。
- コストベースアプローチ
- DBMS に蓄積された表やインデックスの統計情報をもとにコストを見積り、その結果に基づいて最も効率的な実行計画を作成する方法
- ルールベースアプローチ
- 複数のアクセスパスが存在する場合に、アクセスパスの優先順位などのような一定のルールに従って実行計画を作成する方法
演習問題
クライアントサーバシステムにおけるストアドプロシージャに関する記述のうち,誤っているものはどれか。
- 機密性の高いデータに対する処理を特定のプロシージャ呼出しに限定することによって,セキュリティを向上させることができる。
- システム全体に共通な処理をプロシージャとして格納することによって,処理の標準化を行うことができる。
- データベースへのアクセスを細かい単位でプロシージャ化することによって,処理性能(スループット)を向上させることができる。
- 複数の SQL 文から成る手続を 1 回の呼出しで実行できるので,クライアントとサーバ間の通信回数を減らすことができる。
正解は,3. である。細かな単位ではなく、なるべく大きな単位でまとめたほうがオーバーヘッドが減りスループットの向上に繋がる。
演習問題
クライアントサーバシステムにおいて,クライアント側からストアドプロシージャを利用したときの利点として,適切なものはどれか。
- クライアントとサーバ間の通信量を削減できる。
- サーバのデータベースファイルへのアクセス量を削減できる。
- サーバのメモリ使用量を削減できる。
- データの格納領域を削減できる。
正解は,1. である。クライアントからサーバに対してのストアドプロシージャ 1 回の要求で、データベースに複数のクエリを発行することができるので、クライアントから直に同数のクエリを発行する場合と比較して、クライアント-サーバ間のネットワーク負荷の軽減が期待できる。
② 同時実行制御(排他制御)
同時に複数のプログラムまたは利用者がデータベースを参照したときのデータに対する保全機能をいう。
③ 障害回復
物理的または論理的な障害に対し,速やかに回復させるための機能をいう。
システムが媒体障害以外のハードウェア障害によって停止した場合,チェックポイントの取得以前に終了したトランザクションについての回復作業は不要である。
④ データセキュリティ
トランザクション
データベースを扱う処理は,利用者側から見て 1 つの処理内容であっても,データベースに対する処理は 2 つ以上からなる場合がほとんどである。データベースにおける 1 つの処理をトランザクションという。
ロック
排他制御の一般的な方法は,ロック方式である。DBMS では,トランザクションの並行実行度を高めるために,次表に示すロックモードを提供している。
種類 | 内容 |
---|---|
専有ロック | データ更新を行う場合に使用されるロック。他のトランザクションからのアクセスは一切禁止される。 |
共有ロック | データの読取りの際に使用されるロック。他のトランザクションは,参照のみ許可される。 |
デッドロック
複数のトランザクションがデータに対してロックをかける場合,デッドロックと呼ばれる問題を引き起こす可能性がある。デッドロックは複数のトランザクションが互いに相手がロックしているデータを要求したことで,互いにロック解除待ちとなる現象である。
ACID 特性
ACID 特性は,① 原子性(Atomicity),② 一貫性(Consistency),③ 隔離性(Isolation),④ 耐久性(Durability)をいう。それぞれの内容は,表 ACID 特性に示す。
データ辞書
データディクショナリ(DD)は、データベースのメタデータやデータ定義情報を効率よく管理する情報の保管庫である。データディクショナリは、他のデータベースと同じく表とビューで構成されていて次のような情報が格納されている。
- 概念スキーマ、外部スキーマ、内部スキーマとそれらの変換定義情報
- 表、ビュー、インデックス、その他オブジェクトの定義情報
- 参照制約、検査制約の定義情報
- ユーザ情報
- アクセス権と機密保護に関する情報
データディクショナリ/ディレクトリ(DD/D)
メタデータやデータ定義情報を効率よく管理する仕組みである。
データディクショナリ/ディレクトリは、それぞれのサイトに存在するデータベースごとに存在しますが、分散データベースでは「資源位置に対する透過性」を満たすためにこれに加えて、どのサイトからもアクセスが可能なグローバルなデータディクショナリ/ディレクトリを用意する必要がある。
このグローバルな DD/D の配置方式には「集中管理方式」と「分散管理方式」がある。
- 集中管理方式
- 1 つのサイトが代表してすべての DD/D を保有する方式。管理は容易になるが、負荷が集中してしまう点やサイトの障害によって分散データベースが利用できなくなってしまう欠点がある。
- 分散管理方式
- DD/D を複数のサイトに分散して保有する方式。さらに分散管理は、全てのサイトで重複して DD/D を保有する方式と、重複なく保有する方式に分類することができる。
データベース設計
- データの分析の考え方を修得し,応用する。
- データベースの設計の考え方,手順,手法を修得し,応用する。
- データの正規化の目的,手順を修得し,応用する。
- データベース作成の手順,評価方法を修得し,応用する。
- オブジェクト指向データベースの考え方を修得し,応用する。
(1) データ分析
(2) データベースの設計
① データベース開発工程
② データベースの概念設計
E-R モデル
データベースの概念設計に用いられ,対象世界を,実体と実体間の関連という二つの概念で表現するデータモデルである。
③ データベースの論理設計
(3) データの正規化
データの正規化とは、ある基準や形式に適合するように、一定の手順や規則に従って変形・変換することである。具体的には,データの重複や矛盾を排除して,データベースの論理的なデータ構造を導き出す。
正規化の本来のレベルは第 1 正規化から第 5 正規化まであるが,一般的には第 3 正規化までを行う。
第 1 正規形
第 1 正規形(first normal form)とは、リレーショナルデータベースでデータの冗長性や不整合を排除した正規形の一つで、一つの行(レコード)の中で特定の項目が繰り返し含まれたり、複数の値を連結した値が含まれるような構造を廃したもの。そのような形式に変換することを第 1 正規化という。
第 2 正規形
リレーショナルデータベースでデータの冗長性や不整合を排除した正規形の一つで、ある表(リレーション)が第 1 正規形であり、かつ、レコード中の非キー項目のうち、主キーのいずれかが定まれば一意に定まるようなものを排除して独立した表として分離したものを第 2 正規形(second normal form)という。そのような形式に変換することを第 2 正規化という。
第 2 正規形の例を示す。
従業員番号 | 氏名 | 入社年 | 職位 | 職位手当 |
---|---|---|---|---|
12345 | 情報 太郎 | 1981 | 部長 | 90,000 |
12346 | 処理 次郎 | 1995 | 課長 | 50,000 |
12347 | 技術三郎 | 1997 | 課長 | 50,000 |
上表は、属性の値として繰り返し項目がないため第 1 正規形を満たしている。さらに主キーは単一の属性値であり、部分関数従属が存在しないため第 2 正規形の条件も満たしている。
さらに、第 3 正規形の条件となる主キー以外の属性に一意に決まる属性がないかについて注目してみると、"職位" が決まれば "職位手当" は一意に決定されるという従属関係があることがわかる。第 3 正規形を満たすためにはこの関係を別表に分離しなくてはならないが、上表では分離されていないため第 3 正規形までは正規化が行われていないことになる。
第 3 正規形
リレーショナルデータベースでデータの冗長性や不整合を排除した正規形の一つで、ある表(リレーション)が第 2 正規形であり、かつ、レコード中の非キー項目のうち、他の非キー項目のいずれかが定まれば一意に定まるようなものを排除して独立した表として分離したものを第 3 正規形(third normal form)という。そのような形式に変換することを第 3 正規化という。
(4) データベースのパフォーマンス設計
(5) データベースの物理設計
(6) データベースの作成手順
(7) データベースの評価・運用
(8) オブジェクト指向データベース
オブジェクト指向データベースは,「オブジェクト」という単位でデータを格納するデータベースである。オブジェクト指向は,1990 年代に Java をはじめとするオブジェクト指向プログラミング言語で注目され,その後広く普及した。
オブジェクト指向データモデル
複合オブジェクト
XML データベース
XML データベースは,XML (Extensible Markup Language) の形式でデータを格納するデータベースである。
XML データベースの大きな特徴は,あらかじめデータベースの構造(スキーマ)を定義しなくてもデータが格納できてしまう点である。XML データベースの場合は,最初にデータの構造(スキーマ)を定義しないため,いったんデータの格納が始まってから,格納するデータの種類が増えても,元から存在していたデータのパス(階層位置)が変わらなければアプリケーションプログラムへの影響がない。このため,データの構造が将来的に成長していくような(格納するデータの種類が増えていくような)データベースの場合には,XML データベースが適している。
一方で,XML データベースは,実データと一緒にタグデータを保持する必要があり,他のデータベースと比較して,データサイズが大きくなってしまう傾向がある。また,データがツリー構造であるため,たくさんのデータの中からある条件に合致するデータを全て取得する場合など性能面でリレーショナルデータベースに比べて分が悪い場合がある。
オブジェクト識別性
O/R マッピング
データ操作
- 関係データベースのデータの操作を修得し,応用する。
- データベース言語の種類,SQL 文を修得し,応用する。
(1) データベースの操作
(2) データベース言語
① データベース言語の種類
埋込型 SQL
埋込型 SQL とは、C や COBOL、Pascal のような手続き型プログラミングに関係データベースを操作するための SQL を埋め込むための手法である。
クエリ(query)
データベース管理システム(DBMS)では、利用者や外部システムからデータベースに対する処理要求(問い合わせ)を文字列として表したものをクエリという。データの検索や抽出だけでなく、追加や更新、削除などの要求を発行するのにも使われる。
例えば、検索クエリであれば検索対象のテーブルやデータの抽出条件、並べ方などを指定する。DBMS はクエリを解釈・実行し、結果をレコードセットなどの形で応答する。一度作成したクエリは保存しておいて何度も使うことができるようになっているものが多い。
データベースとして最も広く普及しているリレーショナルデータベース(RDB/RDBMS)ではクエリを記述する言語の標準として「SQL」(Structured Query Language)が定められており、単にクエリと言えば通常はSQLクエリを指す。
DBMS が受け付けたクリエを実行するまでの処理の長さは,次のようになる。
② データベース言語(SQL)
データベース言語(SQL)とは、リレーショナルデータベース(RDB:Relational Database)の管理や操作を行うための問い合わせ言語の一つ。業界標準として広く普及しており、様々なデータベース管理システム(DBMS:Databese Management System)で利用できる。
(a) データ定義言語
データ定義言語(DDL)はデータベースやテーブルなどの定義に関わる言語である。どのような形式のデータを入れることができるかなど,データの書式を定義する。
命令 | 意味 |
---|---|
CREATE | データベースやテーブルなどを作成する命令 |
DROP | データベースやテーブルなどを削除する命令 |
ALTER | データベースやテーブルの定義を変更する命令 |
データ制御言語(DCL)
データ制御言語はデータ操作に関する制御を取り扱う言語である。データベースやテーブル,データ全体に対する権限をユーザに与えたり,データ操作の単位(トランザクション)で処理を確定させたり,処理した後で元に戻したりする処理を行う。
命令 | 意味 |
---|---|
GRANT | データベースやテーブルなどに対する権限をユーザに与える命令 |
REVOKE | GRANT で設定した権限を取り除く命令 |
COMMIT | トランザクションを確定する命令 |
ROLLBACK | トランザクションを取り消す命令 |
GRANT 文は,1 人または複数のユーザに表などのオブジェクトに関する特定の権限を付与する SQL 文である。一方,アクセス権限を取り消すには,REVOKE文を使用する。
参照制約
参照制約は、外部キーを持つ表にレコードを追加する場合に、その外部キー列の値は参照先の表の主キーとして存在するものでなければならない、また、別表から主キーの値を参照されている行は削除することができないという制限を課す制約である。
参照制約は、関係データベースの整合性を保つために設定され、その指定には次のように "FOREIGN KEY" と "REFERENCES" が使われる。
FOREIGN KEY 列リスト REFERENCES 親テーブル(列リスト)
検査制約
検査制約は、テーブルに格納されるデータの種類を一定の範囲や種類に限定するための方法である。
検査制約を設けるには、CREATE TABLE文でテーブルを作成するときの属性(列)の定義を
という形式で記述することで、特定の列の値が任意の式を満たすように指定できる。
(b) データ操作言語(SELECT 文)
データ操作言語(DML)はレコードを操作する言語で,実際のデータを出し入れするための目入れである。追加したり,削除したりする対象はレコードであるため,データベースの構造を変えたり,削除することはできない。
命令 | 意味 |
---|---|
SELECT | レコードを取得したり検索したりする命令 |
INSERT | レコードを追加する命令 |
DELETE | レコードを削除する命令 |
UPDATE | レコードを更新する命令 |
指定した列において,同じ値を持つ行をグループ化する。グループ化したものは,次表の集合関数で結果を求める。この集合関数は,SELECT 句や HAVING 句で使用する。
集合関数 | 内容 |
---|---|
SUM(列名) | グループの合計を求める。 |
AVG(列名) | グループの平均を求める。 |
MAX(列名) | グループの中の最大値を求める。 |
MIN(列名) | グループの中の最小値を求める。 |
COUNT(*) | グループの総行数を求める。 |
COUNT(列名) | 空値でない総行数を求める。 |
DISTINCT(列名) | 列を取り出した後に重複を取り除く。(射影) |
UNION 句は、和集合演算を行う演算子で、複数の SELECT 文の結果セットを 1 つに統合する機能を持つ。通常の UNION では、2 つの結果セットに全く同じレコードがあった場合に重複行が削除された結果を返すが、UNION ALL では重複行を含めた結果を返す。
演算子 IN,EXISTS,ALL 及び ANY は、値の集合や副問合せ(サブクエリ)からの結果セットに対して「真」又は「偽」の評価を行い、主問合せ(メインクエリ)の WHERE 句で使用される。
- IN
- 結果セットの値のうちいずれかに一致すれば真を返し、そうでなければ偽を返す。
- EXISTS
- 副問合せの結果セットが1行以上あれば真を返し、そうでなければ偽を返す。
- ANY
- 比較演算子(=,≥,≤,>,<)と共に使用され、副問合せの結果セットの値のうち、いずれかが条件を満たせば真を返し、そうでなければ偽を返す。
- ALL
- 比較演算子と共に使用され、副問合せの結果セットの値の全てが条件を満たした場合にだけ真を返し、そうでなければ偽を返す。
(c) その他のデータ操作言語
関係データベース管理システムでは、参照整合性を維持する観点から、ある行が削除・更新された後に当該の行の値を参照する他の行が別表に残ってしまうことを許さない。SQL では、データ操作によってこのようなことが起きた場合に発生させる 5 種類の参照操作(CASCADE,RESTRICT,NO ACTION,SET NULL,SET DEFAULT)を規定している。
CASCADE | 参照先データの更新または削除に伴い,対応する参照元レコードを削除する |
---|---|
RESTRICT | 参照制約性を損なうデータの更新または削除を禁止する |
NO ACTION | RESTRICT と同じく更新・削除を禁止するが,エラー発生のタイミングが異なる |
SET NULL | 参照先データの更新または削除されると,対応する参照元レコードの属性値に NULL を設定する |
SET DEFAULT | 参照先データの更新または削除されると,対応する参照元レコードの属性値にデフォルト値を設定する |
(d) 埋込型 SQL
カーソル操作は、アプリケーションプログラムからデータベースへの問合せによって得られた導入表を、表データを直接扱えない手続き型プログラム言語に 1 行ずつ渡す機能を実現するものである。SQL ではカーソル宣言に "DECLARE CURSOR"、カーソル位置のデータ取得および次データへの移動に "FETCH" 文を使う。
演習問題
埋込み SQL において,問合せによって得られた導出表を1行ずつ親プログラムに引き渡す操作がある。この操作と関係の深い字句はどれか。
埋込み SQL において,問合せによって得られた導出表を1行ずつ親プログラムに引き渡す操作がある。この操作と関係の深い字句はどれか。
- CURSOR
- ORDER BY
- UNION
- UNIQUE
正解は,1. である。
トランザクション処理
- データベースの同時実行制御(排他制御),障害回復の考え方,仕組みを修得し,応用する。
- トランザクション管理,アクセス効率向上のための考え方を修得し,応用する。
- データに対するアクセス制御の必要性,代表的なアクセス権限を修得し,応用する。
データベースを扱う処理は,利用者側から見て 1 つの処理内容であっても,データベースに対する処理は 2 つ以上からなる場合がほとんどである。データベースにおける 1 つの処理の基本単位は,トランザクション[1]と呼ぶ。
- ソフトウェアの処理方式の一つで、互いに関連・依存する複数の処理をまとめ、一体不可分の処理単位として扱うことを指す。
(1) 同時実行制御(排他制御)
DBMS において,複数のトランザクション処理プログラムが同一データベースを同時に更新する場合,論理的な矛盾を生じさせないために用いる技法を排他制御という。
獲得するロック | |||
---|---|---|---|
共有ロック | 排他ロック | ||
資源の状態 | 共用ロック | 〇 | × |
排他ロック | × | × |
専有ロック(排他ロック)
データを更新するときに使うロックで、資源がこの状態の場合は他のトランザクションによる読込みや更新ができなくなる。
共有ロック(共用ロック)
データを読込むときに使うロックで、資源がこの状態の場合は他のトランザクションによる更新処理ができなくなる(読込みは可能)。
デッドロック
デッドロックは、共有資源を使用する 2 つ以上のプロセスが、互いに相手プロセスの必要とする資源を排他的に使用していて、互いのプロセスが相手が使用している資源の解放を待っている状態に陥ってしまうことをいう。
2 相コミットメント
2 相コミットプロトコルは、トランザクションを他のサイトに更新可能かどうかを確認する第 1 相と、更新を確定する第 2 相の 2 つのフェーズに分け、各サイトのトランザクションをコミットもロールバックも可能な中間状態(セキュア状態)にした後、全サイトがコミットできる場合だけトランザクションをコミットするという方法で分散データベース環境でのトランザクションの原子性・一貫性を保証する手法である。
例えば,主サイトが全ての従サイトからコミット準備完了メッセージを受け取った場合,全ての従サイトに対してコミット要求を発行する。
(2) 障害回復
障害回復処理は,データベース運用中に起きた何らかの障害から,正常状態へ戻す処理のことである。障害のケースには,① データベースが格納されている記憶媒体の障害,② トランザクション処理中に起きた障害,③ システムエラーなどが考えられる。
障害回復を行うには,正常稼働中のデータベースに対して,バックアップファイルとログファイル(ジャーナルファイル)を事前に搾取しておく必要がある。
フルバックアップ
データベース全体をバックアップする。
差分バックアップ
フルバックアップ後に変更のあったデータのみバックアップする。
増分バックアップ
前回のバックアップ(フルバックアップまたは増分バックアップ)後に変更のあったデータのみをバックアップする。
ジャーナルファイル(ログファイル)
データベースに対して行われた更新処理を記録するファイル。更新前のデータの値(更新前ログ)と更新後のデータの値(更新後ログ)を時系列順に記録する。ログファイルへ書き出されるタイミングは,トランザクションのコミットまたはチェックポイントで行う。
ロールフォワード
データベースに媒体障害が発生したとき,バックアップコピーでデータベースを復元し,バックアップ取得以降にコミットした全てのトランザクションをロールフォワード(前進復帰)する。
ロールバック
トランザクション処理では,ACID 特性の原子性が求められる。トランザクション処理中の障害回復の方法として,コミットとロールバック(後退処理)がある。
1 つのトランザクションは処理を終えた場合,コミットで更新内容を確定し,終了する。もし,あるトランザクションがエラーを起こしコミットできなかった場合,ロールバックで障害直前に行ったコミットの箇所まで戻すことで回復させる。
ウォームスタート
チェックポイントまで戻り,更新ログを使用してデータベースを復旧させ,処理を再始動する方法である。
コールドスタート
コンピュータの電源を切り,メモリなどのハードウェアをリセットして復旧させ,処理を再始動する方法である。
(3) トランザクション管理
トランザクションは,次表の ACID 特性を保持しながら処理を実行する必要があり,この管理を DBMS が行う。なお,ACID はデータベースのトランザクション処理を行う上で必要不可欠とされる 4 つの性質の頭文字を並べた言葉である。
特性 | 内容 |
---|---|
原子性 (Atomicity) |
いかなる処理が完了するか,まったく実行されていないかのどちらかで終了すること。具体的には,トランザクションが完了したときの状態は,処理済みか未処理のどちらかしかない。 |
一貫性 (Consistency) |
常に整合性の状態が保たれていること。具体的には,トランザクション処理においてデータベースの一貫性が保てる。 |
独立性 (Isolation) |
複数のトランザクションを同時実行した場合と逐次に実行した場合との処理結果が一致すること |
永続性 (Durability) |
トランザクションの性状終了後は,更新結果に障害が発生してもデータベースからデータが消えたり,内容が変化したりしないこと。 |
さらに,トランザクションを安全に利用するための管理機能として排他制御と障害回復処理がある。
(4) データベースの性能向上
クラスタ化インデックス
データベースサーバのクラスタリング技術の特徴のうち,シェアードエブリシングは,負荷を分散し,全てのサーバのリソースを有効活用できることに加えて,データを共有することによって 1 台のサーバに故障が発生したときでも処理を継続することができる。
B+ 木インデックス
木の深さが一定で葉のみが値をもつ平衡木を用いたインデックスで、RDBMS のインデックス法として現在最も普及している。
B+ 木インデックスは,根および節にはキー値の範囲と下層のブロックへのポインタ、葉にはキー値と表内の行の位置情報と前後の葉へのポインタが格納されていて、根から節をたどっていくことで目的のデータを検索する。すべてのキー値が同じ深さにあるので、データ量が増加してもパフォーマンスの低下が少なく、どのキー値に対してもランダム検索や範囲検索、挿入・更新・削除を効率よく行える特徴を持つ。また葉に含まれている前後の葉へのポインタによって一致検索だけでなく、"<",">","BETWEEN" などの範囲検索を効率よく行える。一方,データの分布に偏りがある場合や、NULL 値及び否定を含む検索条件では効果を発揮できない。
(5) データ制御
データベース応用
- データベースの応用対象,応用方法を修得し,応用する。
- 分散データベース及びNoSQL の特徴,機能を修得し,応用する。
- データ資源管理の仕組みとして,リポジトリ,データディクショナリを修得し,応用する。
(1) データベースの応用
OLTP(Online Transaction Processing)
スライシング,ダイシング,ドリルダウンなどのインタラクティブな操作によって多次元分析を行い,意思決定を支援する。
データマイニング
データマイニング(Data Mining)は、データウェアハウスに蓄積されている大量の生データから、統計学的手法、数学的手法を用いて今まで知られていなかったデータの規則や因果関係を見つけ出す手法である。
(2) 分散データベース
透過性
複数のサーバに一つの表が重複して存在しても,プログラムは表の重複を意識する必要がない。
2 相コミットメント
複数の場所に分散して配置したデータベースを論理的に 1 つのデータベースのように操作できるようにしたものを分散データベースと呼ぶ。
分散データベースでは,一連のトランザクション処理を行う場合,分散するすべてのデータベースに対して更新可能かを問い合わせ,すべてから更新可能であることを確認してから,更新処理(コミット)を行う必要がある。この制御を 2 相コミットメント制御という。
Apache Hadoop
Apache Hadoop とは、大規模データを効率的に分散処理・管理するためのソフトウェア基盤(ミドルウェア)の一つ。Java 言語で開発されており、開発元のアパッチソフトウェア財団(ASF:Apache Software Foundation)がオープンソースソフトウェアとして公開している。
(3) NoSQL
NoSQL(Not only SQL)は、データへのアクセス方法を SQL に限定しないデータベース管理システムの総称で、長い間決まったように使用されてきた関係データベース管理システム以外の DBMS という意味で用いられる。
NoSQL は、スキーマレスで軽量なのでデータの参照や追加を低コストで実行できる。さらにスケーラビリティにも優れるため大量に蓄積されていくデータを扱うのに適している。NoSQL には,キー・バリュー型,カラム指向,ドキュメント指向,グラフ指向がある。
NoSQL データベースと従来から利用されてきた RDBMS の主な違いは,次表のとおり。
RDBMS | NoSQL | |
---|---|---|
データタイプ | 構造化データ | 非構造化データがメイン |
スキーマ | 事前定義が必要で,固定的 | 事前定義不要で,柔軟に変更可能(スキーマレス) |
データ一貫性 | ACID 特性により一貫性が厳密に維持される | 一時的に一貫性が厳密に維持されていない状態がある(結果整合性) |
拡張性 | スケールアップが基本。データ一貫性の維持を厳密に行うため,パフォーマンスの低下が目立つ | スケールアウトにより大量アクセスによるパフォーマンスの低下が少なく,リニアにスケールする |
サーバ | 1 台で稼働することが前提 | 分散・協調して動くことが前提 |
耐障害性 | 耐障害性を高めることのコストが高い | 単一障害点がないものが多く,低コスト |
問合せ言語 | SQL | SQL でない複数言語サポート |
データ量 | (NoSQL に比べ相対的に)小規模データ | (RDBMS に比べ相対的に)大規模データ |
ドキュメント指向 DB
データ項目の値として階層構造のデータをドキュメントとしてもつことができる。また,ドキュメントに対しインデックスを作成することもできる。
グラフ指向 DB
NoSQL の一種で,ノード,リレーション,プロパティで構成され,ノード間をリレーションでつないで構造化する。ノード及びリレーションはプロパティをもつことができる。SNS におけるユーザの関係や Web サイト同士のリンク構造などの高度な "つながり" を表すデータモデルに適している。
KVS(Key Value Store)
一つのキーに対して一つの値をとる形をしている。値の型は定義されていないので,様々な型の値を格納することができる。

カラム指向 DB
一つのキーに対して複数の列をとる形をしている。関係データベースとは異なり,列の型は固定されていない。
(4) データ資源管理
データレイク
必要に応じて加工するために,データを発生したままの形で格納する。
データウェアハウス
データウェアハウスを提唱したビル・インモン氏(米国のコンピュータ科学者)は,データウェアハウスを次のように定義している。
データウェアハウスの定義
意思決定のため,目的別に編成され,統合された,時系列で,削除や更新をしないデータの集合体
データマート
データウェアハウスに格納されたデータの一部を,特定の用途や部門用に切り出して,データベースに格納すること。
本稿の参考文献
- テクノロジックアート,「アジャイルソフトウェア開発技術シリーズ(基礎編) データベース」,東京電機大学出版局,2013年6月20日発行
- 小野 哲,藤本 亮,「現場で使える SQL 第2版」,翔泳社,2006年11月15日発行
- 小笠原 種高,「これからはじめる MySQL 入門」,技術評論社,2018年6月7日発行
NoSQL データベースが登場した理由
世の中にある全てのデータがきれいな構造であるとは限らない。ときには,構造化が難しいデータもある。そうしたデータを保存するため,NoSQL は生まれた。NoSQL データベース登場前は,データを無理やりきれいな形にして,リレーショナルデータベースに格納する方法がとられていたが,そのための処理を毎回行うことは,作業者の負担が大きく,また,データの要素を正しく扱えるとは限らず,処理速度が低下するなどの問題があった。NoSQL の登場により,リレーショナルではないデータもそのまま扱えるようになった。
例えば,代表的な NoSQL の 1 つである「Key-Value ストア」は,データベースの高速化を重視した構成である。キーにたくさんの値を結びつけることでデータを保存する。キーを指定し,それに結びつけられたデータを取得するのは得意だが,任意の検索は苦手である。また,「XML データベース」はドキュメント構造をそのまま保存できるようにしたデータベースで,全文検索などのテキスト処理が得意である特徴がある。
ビッグデータを扱いたいなど,データの件数が多い場合には,パフォーマンス向上のため,NoSQL 製品を選んだほうがよい場合がある。