カテゴリー : データベース入門

データベース『障害回復について』

データベースには、障害が発生したとしても、データ復旧のための手段が備わっています。
障害には、物理的な障害や人為的なミスなど様々あります。

データベースを復旧させるための仕組みとして
「バックアップ」「ログ(ジャーナル)」「チェックポイント」というものがあります。

バックアップは、データベースのすべての内容をコピーしたもの。

ログ(ジャーナル)は、データの変更前後の内容と変更内容を記録したもの。

チェックポイントは、データベースとログの内容に整合性がとれいる時点のこと。

ロールバックは、障害発生時のデータに対して、更新前のログでデータベースを復旧させる方法。

データベースに物理的な障害が発生した場合は、
まず、一番新しいバックアップデータで復元して、更新後のログで障害直前の状態に復旧させます。
このような復旧方法を「ロールフォワード」と言います。

データベース『ACID特性とは』

トランザクション処理に求められる4つの特性。
Atomicity(原子性)、Consistency (一貫性)、Isolation(独立性)、Durability(耐久性)
それぞれの頭文字からACID特性と呼ばれています。

Atomicity(原子性)
トランザクションが終了したとき、すべて処理が終了している。もしくは、処理が行われていない状態のどちらかでなくてはいけない。
途中で処理が止まっている。など中途半端な状態であってはいけない。

Consistency (一貫性)
トランザクションの状態に関係なく、データベースに矛盾が生じていない状態が継続されていなくてはならない。

Isolation(独立性)
複数のトランザクションを実行した場合でも、それぞれの処理に影響を与えないで処理されなくてはならない。

Durability(耐久性)
処理されたトランザクションは、データベース障害が発生しても、データの内容が失われてはならない。

データベース『トランザクションとは』

トランザクションとは、それ以上分けられない処理の単位のことです。
データベースでは、処理ごとにデータの更新をしたり、キャンセルすることができます。

たとえば、A銀行からB銀行に10万円振り込んだときのことを考えてみます。
A銀行から10万円の振り込み手続きが完了し、B銀行へ動こうとしたそのとき、B銀行でシステム障害が発生してしまいました。
結局、B銀行に10万円は振り込まれませんでしたが、A銀行からは10万円減ってしまいました。
10万円はどこかに消えてしまいました。

なんてなってしまっては、困ります。
このような事態に陥らない仕組みが、トランザクションです。
A銀行からB銀行へ振り込みに失敗してしまったら、このトランザクションをなかったことにします。
なかったことにすることで、10万円はA銀行に戻ってきます。
これを『ロールバック』といいます。

B銀行にシステム障害が発生していなければ、
A銀行からB銀行へ10万円が振り込まれます。
これは、正常に処理がされたので、トランザクションを確定することになります。
これを『コミット』といいます。
コミットされると、トランザクションのやり直しはできません。

トランザクション処理は、コミット(処理を確定)するか、ロールバック(処理をキャンセル)するかのどちらかを必ず実行します。

データベース スキーマについて

前回まで、データベースのデータモデルについて見てきました。
今回はスキーマについてです。

スキーマとは、データベース構造を意味します。
データ構造、データベースを操作する時のルールや表現法、他のデータとの関連などを定義したものです。

スキーマは、以下の3つに分けることができます。

  • 概念スキーマ
  • 外部スキーマ
  • 内部スキーマ

概念スキーマ

概念スキーマは、データベースに管理される対象全体のデータ構造を定義します。
リレーショナルデータベース(RDB)では、テーブルが概念スキーマになります。

外部スキーマ

外部スキーマは、データベースの利用者(ユーザやアプリケーション)が必要とする対象のデータ構造を定義します。
リレーショナルデータベース(RDB)では、ビューが外部スキーマに該当します。

内部スキーマ

内部スキーマは、データの物理的な格納方法を定義します。
インデックスやデータファイル配置などに該当します。

各スキーマの呼び方の違い

概念スキーマは単に「スキーマ」と呼ばれることもあります。
同じように、外部スキーマは「サブスキーマ」、内部スキーマは「記憶スキーマ」と呼ばれることもあります。

データベースのデータモデル-その3 『リレーショナルデータモデル』

前回の記事では『論理データモデル』階層型データモデルとネットワーク型データモデルを見てきました。

この記事では、現在の主流のデータモデル「リレーショナルデータモデル」です。
リレーショナルデータモデルは、データを2次元の表で表します。
2次元の表は、EXCELの表を思い浮かべるとわかりやすいですね。
この表を「テーブル」といいます。
テーブルの列を「フィールド」、行を「レコード」といいます。
フィールドでは、データ項目を、レコードにはデータそのものを表します。
リレーショナルデータモデル

現実社会では、2次元の表がそのまま使われていることも多く、人間にとって理解しやすい形です。

階層型データモデルとネットワーク型データモデルでは、アプリケーションがデータ構造に強く依存しているため、データ構造を変更するには、アプリケーション側もルートの再修正が必要になり、容易に変更することができませんでした。

リレーショナルデータモデルでは、データ構造がシンプルでわかりやすく、アプリケーションの変更も容易にできるメリットがあります。

リレーショナルデータベースには、さまざまな種類が存在します。
商用データベースでは

  • オラクル社のOracle Database
  • マイクロソフト社のSQL Server
  • IBM社のDB2

オープンソースでは

  • MySQL
  • FireBird
  • PostgreSQL

データベースのデータモデル-その2 『論理データモデル』

前回『概念データモデル』について学びました。
今回は、論理データモデルについてです。
論理データモデルは概念データモデルよりも、コンピューターに近い形で表現したものです。

論理データモデルは、データベースの種類によっていくつかに分けることができます。

階層型データモデル

階層型データモデルは、ツリー状に表現するデータモデルです。
会社の組織図のような形ですね。

階層型データモデル

階層型データモデル

このような形ですと必要なデータに対してルートが1つしかない状態になります。
1対多か1対1の関係になります。
Bにbが従属していますが、Dにもbが従属している。ということが起こってしまいます。
データの冗長化が起こりやすくなります。

ネットワーク型データモデル

ネットワーク型データモデルは、データのつながりを網状にし、多対多に対応させたデータモデルです。
ルートが1つしかなかった階層型データモデルでのデータの冗長化は発生しません。

ネットワーク型データモデル

ネットワーク型データモデル

ただ、これでは、データベースが巨大化すれば、複雑さがどんどん増してしまいます。

階層型データモデルにも言えることですが、アプリケーションはデータの構造に強く依存します。
データ構造に変更があれば、アプリケーションも修正を加えなくてはいけません。
容易にデータ構造を変更することができません。

データベースのデータモデル-その1 『概念データモデル』

データベースといっても様々な種類があります。
データベースを構築するには、まず現実社会のデータをコンピューター上で扱いやすくする必要があります。
この作業をデータモデリングといいます。
データモデリングによって、置き換えられたデータをデータモデルといいます。

データモデルは、データモデリングの段階によって分けることができます。

概念データモデル

概念データモデル、データベース設計において初期段階で作成されます。
概念データモデルはER図での記述が代表的。
エンティティ(Entity:実体)とリレーションシップ(Relationship:関連)の頭文字をとったもの。

ER図
E-R図の3つの記号
□ 実体=対象を構成する要素
◇ 関連=実体間の関係
○ 属性

実体には、人や商品などの「物」が該当します。
関連には、発注や受注、納品、所属などの「イベント」が該当します。
~すると言い換えられる単語が関連。
関連は、「1対1」「1対多」「多対多」のパターンで実体と実体を結びつけます。

属性(Attribute)は、実体と関連における固有の情報や特性を表現します。

次回は、論理データモデルをみてみましょう!