3つの代表的なデータベースモデル

データベース

 今回は3つの代表的なデータベースモデルである「階層型データベースモデル」、「ネットワークモデル」、「関係(リレーショナル)モデル」について書こうと思います。

はじめ

 はじめに、データベースモデルに使われる言葉として、レコードタイプレコードにおいて説明します。例として、学校の「学年」、「クラス」、「名前」で考えてみましょう。

 まずレコードとは、上図の「1学年」や「Bクラス」、「三郎」といった情報の基本単位のことを言います。そしてこのレコードを同一形式にそろえた「学年」や「クラス」、「名前」をレコードタイプと言います。

階層型データベースモデル

 ここからは階層型データベースモデルについて説明していきます。例として上で使用したレコードのノードで階層型を表したものが下図になります。

 今回は、見やすいように「太郎」、「次郎」、「三郎」の所属する部分のみに線を引きましたが、本来は、「学年」から「名前」にかけて、多くの繋がりがあります。このとき、「太郎」、「次郎」、「三郎」からみて「Bクラス」のことを親ノードと言います。対して「Bクラス」からみて「太郎」、「次郎」、「三郎」のことを子ノードと言います。上図のように階層型では、親ノードと子ノードの関係は1対多になります(「2学年」には「Aクラス」、「Bクラス」、「Cクラス」のように)。

 次に、この階層型データベースモデルで問題となってくる点について説明します。それは、子ノードが複数の親ノードを持つ場合です。例として、同じ学校の「部活」を考えてみましょう。部活は「野球」、「卓球」、「水球」の3つがり、「太郎」と「次郎が」部活を掛け持ちし、2つの部活に所属しているとします。その場合、子ノードに対する親ノードが複数になってしまい、階層型として不自然な形となってしまいます。これを無理やり階層型としての形にしようとすると、下図のようになります。

 このように、子ノードが親ノードを複数もつデータを階層型データベースモデルにすると、「太郎」や「次郎」が重複しておりデータとして不自然なため、データの削除や追加が大変になるという問題があります。

ネットワークモデル

 ここからは、ネットワークモデルについて説明していきます。ネットワークモデルは、子ノードが親ノードを複数もてるようになった階層型データベースモデルといえます。そのため、階層型と違い、多対多の関係を持つことができます。階層型で扱った「部活」の例を、ネットワークモデルにしたものが下図になります。

 上図のようにネットワークモデルでは、多対多の関係を持つデータに対して有効です。

関係(リレーショナル)モデル

 ここからは、関係(リレーショナル)モデルについて説明していきます。関係モデルとは、データベースを「表」の集まりのように表現したものです。先ほど説明した階層型データベースモデルやネットワークモデルがデータ管理の経験をもとに作られたのに対し、関係モデルは関係代数などの数学をもとに作られています。関係モデルの例が下図になります。

 関係モデルに使われる用語は下記になります。

  • 関係(リレーション):上図にそれぞれの表のこと
  • 関係(リレーション):表の上にある「学生」や「部活」という表の名前のこと
  • 属性:オレンジ部分に書かれている「学年」や「クラス」などのこと
  • 属性値:「1学年」や「次郎」などのこと
  • レコードorタプルor:「1学年 Bクラス 太郎」といった表の行のこと

 各属性値には「太郎」や「卓球」のように、1つの値のみが入れられます。そのため、部活表の「卓球」や「太郎」などは複数存在することになります。

まとめ

 以上のように、関係モデルはデータの関係を簡潔にまとめられることから、データベースモデルの中で広く使われています。次回は関係モデルについてもっと掘り下げた内容をまとめようと思います。

コメント

タイトルとURLをコピーしました