データモデル
データモデルとは
データベースを構築するには現実世界にあるデータをデータベースに適切に格納するには変換する必要がある。
この変換を行う時のモデルをデータモデル
と呼ぶ。
システムとデータを独立させて別々に管理することをデータ独立
と呼び、データベースはシステムから独立したデータを扱うための仕組みである。
データモデルの種類
データモデルには大きく分けて
- 概念データモデル : 対象データの構造を抽象化して表現したモデル
- 論理モデル : データベースで実際に実装できるモデル
- 物理モデル : DBMS(DataBase Management System)で物理的に配置するモデル
上記の 3 種類に分類される。
- どんなデータを格納するかを決める(概念データモデル)
- どのようなデータベースで実装するか決める(論理モデル)
- 物理的な配置をどうするか決める(物理モデル)
のように 3 種類のモデル別々に考えるのではなく、順々に考えていくことで最適化を図っていく。
論理データモデル
論理データモデルとしては
- 階層型モデル
- ネットワーク型モデル
- 関係モデル(リレーショナルモデル)
- オブジェクト指向型モデル
の 4 つがよく知られている。
階層型モデル
データを木構造で表したデータモデルである。
親ノードは複数の子ノードを持つことができるが、子ノードは親ノードを 1 つしか持てない。
そのため、特定のノードへのルートが限定的になり、速度がアクセス速度が速いメリットがある反面、 子ノードが複数の親ノードを持ちたい場合、重複登録を行う必要があり、同じノードを複数入力することになり、データ的に不自然になる。 また、データの追加や削除を行った場合はルートを再登録する必要がある。
-
メリット : 特定のノードのルートが限定的になり、速度が速い
- デメリット : 柔軟性に欠ける
ネットワーク型モデル
階層型では表現できなかった、子ノードが複数の親を持つことができるようにしたデータモデルであり、網状(ネットワーク)になっている。
階層型・ネットワーク型はシステム開発の過程で経験的に出来上がってきたモデルであるため、データ独立については考えられていない。 そのため、データとシステムを同時に変更しなければ整合性が取れなくなってしまう。
- メリット : 重複する要素を取り除ける
- デメリット : データ独立ができない
関係モデル(リレーションモデル)
テーブル(表)とテーブル間の関連でデータを表現し、関係理論を基に考えられ、データ独立しているデータモデルである。
データベースを関係(リレーション)の集まりと考え、階層型・ネットワーク型の欠点であった柔軟性を解決できた反面、プログラムが複雑化しやすく、処理速度が遅くなる傾向にある。
また、関係モデルは表形式のデータであり、アプリケーションではオブジェクト指向プログラミングが 用いられる。この 2 つの間でデータ構造の不一致が起きている。(O/R(Object/Relational) インピーダンス ミスマッチ
と呼ぶ)
このミスマッチを取り除くためにオブジェクト指向プログラミングの作法でデータベースにアクセスするための仕組みをO/R マッパー(O/R mapper)
と呼ぶ。
O/R マッピングの実装により、メモリを大量に消費することがあり、データサイズが大きい場合などにパフォーマンス上のボトルネットとなる場合もある。
- メリット : 柔軟なデータの扱い
-
デメリット : プログラムの複雑化・処理速度低下
オブジェクト指向型モデル
データと操作を一体化して扱う考え方のデータモデルである。
関係モデルでは表形式でデータが格納されていたのに比べて、複雑なデータ構造を高速に処理することが可能であり、 テキストや音声・動画のような様々な形式のデータを管理する場合に適しているデータモデルである。
-
メリット : 複雑なデータ構造を高速で処理が可能。O/R マッピングを実装しなくて良い
-
デメリット : 想定しないアクセスをしたときに処理速度が遅 くなる。相互運用性が低い