Works by

Ren's blog

@rennnosuke_rk 技術ブログです

DB設計におけるデータモデル

DB設計における「データモデル」とは

データベース設計で扱われるデータモデルとは、
実世界におけるデータの集合を、DBMS上で利用可能な形に落とし込むためのモデルを指す。

データモデルの種類

データモデルといってもいきなり実装上のDBMSで利用可能な形式に落とし込むのではなく、
段階を踏んで徐々に実装に適したモデル化を行っていく。

抽象化の高いデータモデルから具象度の高いデータモデルへと段階的にモデル化することで、
様々なDBMSに対応したDB設計が可能になる。

データモデルはその抽象度によって主に3種類に分類される。

  • 概念データモデル
  • 論理データモデル
  • 物理データモデル

概念データモデル

概念データモデルでは、DBMSに依存しない抽象度の高いデータモデル設計を行う。
概念データモデルではデータの主体と主体間の関連をざっくりと洗い出すためにE-R図を用いる。

E-R図

E-R(Entity-Relation)図は、情報の主体であるエンティティと、
それらの関連を表すリレーションを可視化する図である。

1対1のE-R図

例えばオンラインショッピングサイトのDB設計を行う場合、以下のようなE-R図を作る。


f:id:rennnosukesann:20180210184722p:plain:w300

上のE-R図は、

  • 1つのユーザ情報に対して、1つのカート情報(購入候補商品)が関連付けられている
  • 1つのカート情報に対して、1つのユーザ情報が関連付けられている

ことを示している。
買い物をするユーザ一人ひとりが一つのカートを保有している状態を表したいときに、
このようなE-R図を書いたりする。
このユーザとカートのような関係を
1対1の関係と呼ぶ。

1対多(多対1)のE-R図

オンラインショッピングサイトにユーザの購買履歴を追加する場合、以下のようなE-R図を作成するかもしれない。

f:id:rennnosukesann:20180210185218p:plain:w300

上のE-R図では、

  • 1つのユーザ情報に対して、0個以上の購買履歴情報が関連付けられている
  • 1つの購買履歴情報に対して、1つのユーザ情報が関連付けられている

一人のユーザは購買履歴を0個以上持ちうる。
例えばオンラインショッピングサイトを初めて利用するユーザには購買履歴は存在しないし、
毎週定期的に雑誌を購入するユーザの購買履歴は毎週のように追加されていく。

逆に、一つの購買履歴に着目すると、その履歴はただ一人のユーザ固有のものであるので、 E-R図上で関連付けられるユーザの数は1となる。

この関係を1対多、または多対1の関係と呼ぶ。

多対多のE-R図

オンラインショッピングを利用するユーザは、欲しい商品を次々とカートに入れていく。

f:id:rennnosukesann:20180210191232p:plain:w300

上のE-R図では

  • 1つのカート情報に対して、0個以上の商品情報が関連付けられている
  • 1つの商品情報に対して、0個以上のカート情報が関連付けられている

ユーザはカートに商品を入れない時もあれば、幾つかの商品入れる時もある。
一方、商品側は様々なユーザからカートに入れてもらえる一方で、
誰からもカートに入れてもらえない可能性もある。

この関係を多対多の関係と呼ぶ。

論理データモデル

論理データモデルは概念データモデルから抽象度を少し下げた、DBMSを考慮したモデルとなる。 この段階のモデルではDBMSの取り扱うデータ構造に乗っ取たモデルの設計が行われる。

論理データモデルの構造にはさまざまなものが存在するが、
特に取り上げられることの多い以下のモデルを紹介する。

  • 階層型データモデル
  • ネットワーク型モデル
  • リレーショナルモデル

階層型データモデル

f:id:rennnosukesann:20180210193550p:plain:w300

データを木構造で表現するモデル。
各データ間に親子関係を構築するため、データ間関係は常に1対多となっている。
あるデータを参照・更新するには、ルート(一番上のデータ)から子データを次々に辿っていく必要があるため、 親データの数が多くなるほどDBで保持すべきデータ数が増えてしまう。

ネットワーク型モデル

f:id:rennnosukesann:20180210194434p:plain:w300

各データに1対多の関係を構築するモデル。
ネットワーク型モデルの一つのデータに着目すると、関係の1はそのデータ自身、
多は他の全てのデータを示す。

階層構造とは異なり、その関係構築の仕方から任意の個数の親レコード・子レコードを持つことができる。

実世界のデータを自然な形でモデル化できたため、1980年代初期までは採用されていたモデルだが
後に後述のリレーショナルモデルに取って代わられた。

リレーショナルモデル

列1 列2 列3 列4

データ間の関係を二次元の表形式で記述するモデル。
(厳密な定義はこちらが詳しい...)

現在、多くのDBMSがこのモデルを採用している。

個々のデータを表す行(row、レコード)と、データの属性を表す列(column、カラム)
からなる表(テーブル)を操作し、データの参照・更新を行う。

このテーブルに対して正規化操作を行うことで、データ集合として提供される情報量はそのままに、よりシステムが利用しやすい形のテーブルへと変換することができる。

物理データモデル

実装にベッタリなデータモデル。 DBMSの定義するデータ型やデータ構造などを前提とする。
例えばリレーショナルモデルを採用したDBMSの場合、ここでテーブルの持つカラム、
各属性の型、テーブルの容量、インデックス、ページサイズなどを決定する。

まとめ

  • DB設計ではデータモデルと呼ばれる概念で現実のデータ集合を実装に向けモデル化する。

  • モデル化作業を行うことで、DBの設計を様々な抽象度行うことができる。

  • 概念データモデルによって、DB上で扱うべき情報が選定される。
    また各情報間の関連を定義することができる。

  • 論理データモデルは、概念データモデルをDBMS上で扱われるデータ構造に落とし込む。

  • 物理データモデルは、DBMSの具体的な定義に基づいた設計を反映する。

参考文献

関係モデル - Wikipedia

平成28年度 データベーススペシャリスト合格教本 (情報処理技術者試験)