IT用語

3層スキーマとは?外部・概念・内部スキーマの違いを初心者向けに画像多めで解説!

クマノくらげ

3層スキーマとは、データベースを3つの視点に分けて考える仕組みです。

外部スキーマは、利用者ごとの見え方。
概念スキーマは、データベース全体の論理構造。
内部スキーマは、実際の保存方法。

この3つを分けることで、
保存方法を変えても利用者の画面に影響を出しにくくしたり、
利用者ごとの見え方を変えてもデータベース全体の構造に影響を出しにくくしたりできます。

つまり、3層スキーマは「変更に強いデータベース」にするための考え方です。

3層スキーマとは?外部・概念・内部の3つに分ける考え方

3層スキーマって何?
内部スキーマ、概念スキーマ、外部スキーマで分かれるみたいだけど
名前が似てて、全然覚えられないよ!

たしかに紛らわしいよね。
3層スキーマとは、データベースを
「利用者から見た姿」
「全体の論理構造」
「実際の保存方法」
の3つに分けて考える仕組みだよ。
ざっくり言うと、データベースをどの視点から見るかの違いなんだ。

どの視点から見るか?

そう。
同じデータベースでも、

  • 利用者から見た姿
  • システム全体として見た姿
  • コンピュータの中で実際に保存されている姿

があるんだよ。

あー、見る人によって見え方が違うってこと?

そうそう。
まずはざっくり表にするとこうだね。

種類一言でいうと見ている視点
外部スキーマ利用者ごとの見え方ユーザー・アプリから見た姿
概念スキーマデータベース全体の設計システム全体から見た姿
内部スキーマ実際の保存方法コンピュータ内部から見た姿

そもそもスキーマって何?

そもそもスキーマって何?

スキーマは、簡単に言うとデータベースの設計図だよ。

設計図?

うん。
たとえばデータベースには、

  • どんなテーブルがあるか
  • どんな項目があるか
  • データ同士がどう関係しているか
  • どう保存するか
  • 誰にどの情報を見せるか

みたいな決まりがあるよね。
そういう構造やルールを表したものがスキーマなんだ。

なるほど。
データそのものじゃなくて、データの入れ物や構造のことなんだね。

外部スキーマとは

それじゃあ、外部スキーマから確認しようか。
外部スキーマは、利用者やアプリごとに見えるデータベースの姿だよ。

利用者ごとに見える姿?

たとえば会社のデータベースを考えてみよう。
同じ社員データベースがあったとしても、人によって見たい情報は違うよね。

人事部は社員の住所とか給与も見るかもしれないけど、
一般社員はそこまで見ないよね。

同じデータベースでも、見る人によって表示されるデータが違うんだね。
なんだかExcelのフィルタみたいだね。

そうだね。
「見える情報を絞る」という意味では、Excelのフィルタに近いイメージだよ。

ただ、外部スキーマはフィルタのように単に行を絞るだけではなく、必要な項目だけを見せたり、見せ方を変えたりするものだよ。
同じ社員データをもとに、部署ごとに別の表示用シートを用意する感じに近いかな。

たとえば、人事部には住所や給与まで見せる。
経理部には給与や振込先を見せる。
一般社員には氏名や部署、メールアドレスだけを見せる、という感じだね。

なるほど。
元のデータは同じだけど、見る人に合わせて表示内容を変えるのが外部スキーマなんだね。

そう。
利用者ごとに必要な部分だけを見せる仕組みが外部スキーマだね。

概念スキーマとは

概念スキーマは、データベース全体の論理的な設計だよ。

論理的な設計って?

簡単に言うと、
「このデータベースには何のデータがあって、それらがどう関係しているか」
を表すものだね。

外部スキーマとは何が違うの?

外部スキーマは、利用者ごとの見え方。
概念スキーマは、データベース全体としての本来の構造なんだ。

たとえば会社のデータベースなら、

  • 社員テーブル
  • 部署テーブル
  • 給与テーブル
  • 勤怠テーブル

があって、
社員はどの部署に所属しているか、
給与データはどの社員に紐づくか、
勤怠データはどの社員のものか、
みたいな関係を決める。

なるほど。
ユーザーごとの見え方じゃなくて、データベース全体の構造なんだね。

そう。
だから概念スキーマは、データベースの中心となる設計図と考えるといいよ。

内部スキーマとは

内部スキーマは、データがコンピュータの中で実際にどう保存されるかを表すものだよ。

実際にどう保存されるか?

うん。
たとえば、

  • データをどのファイルに保存するか
  • どの順番で保存するか
  • インデックスをどう作るか
  • ディスク上にどう配置するか
  • 検索を速くするためにどう管理するか

みたいな部分だね。

急にコンピュータの中身っぽくなったね。

外部スキーマや概念スキーマよりも、かなりシステム内部寄りの話だね。

じゃあ、普通の利用者はあまり意識しない部分?

そうだね。
利用者は「社員一覧が見たい」と思うだけで、
そのデータがディスク上のどこに保存されているかまでは気にしないよね。

裏側でどう保存されてるかは知らなくても使えるもんね。

その裏側の保存方法を表すのが、内部スキーマだよ。

レストランに例えると

整理するためにレストランに例えてみようか。

レストランには、まずお客さん用のメニューがあるよね。

うん。
お客さんは料理名と値段を見るね。

これが外部スキーマに近い。
お客さんに必要な情報だけを見せている。

たしかに、仕入れ値とか原価とか、店員の管理情報は見えないね。

そう。
次に、店全体の管理表を考えてみよう。

  • 料理名
  • 価格
  • 材料
  • 原価
  • 在庫
  • 担当者

こういう情報を店全体で管理している。
これが概念スキーマに近い。

お店全体のデータ構造って感じだね。

そう。
そして最後に、材料を冷蔵庫のどこに置くか、
注文伝票をどの棚に保管するか、
在庫表をどのファイルに保存するか、
こういう実際の保管方法が内部スキーマに近い。

なるほど。
お客さん用メニューが外部スキーマ、
店全体の管理表が概念スキーマ、
保管場所や保存方法が内部スキーマってことか。

3つの関係

この3つは別々に存在してるの?

完全にバラバラというより、階層になっているイメージだね。

外部スキーマ
利用者ごとの見え方

概念スキーマ
データベース全体の論理構造

内部スキーマ
実際の保存方法

上に行くほど利用者に近くて、下に行くほどコンピュータ内部に近いんだね。

3層スキーマの最大の目的は「変更に強くすること」

でも、なんでわざわざ3つに分けるの?
一つの設計図でよくない?

いいところに気づいたね。
3つに分ける理由は、変更に強くするためなんだ。

変更に強くする?

たとえば、内部スキーマを変えて、データの保存方法を効率化したとする。
でも、利用者から見た画面やデータの見え方が変わらなければ、利用者はその変更を意識しなくていいよね。

たしかに。
裏側で保存方法が変わっても、画面が同じなら困らない。

そう。
反対に、ある部署向けの表示内容、つまり外部スキーマを変えても、データベース全体の構造まで大きく変えなくて済む場合もある。

なるほど。
分けておくと、変更の影響を小さくできるんだ。

そう。
これをデータ独立性と呼ぶことがあるよ。

データ独立性とは

データ独立性って何?

簡単に言うと、どこかを変更しても、他の部分への影響をできるだけ小さくする考え方だよ。

種類何を変更する?影響を受けにくくしたい部分
物理的データ独立性内部スキーマ概念スキーマ・外部スキーマ
論理的データ独立性概念スキーマ外部スキーマ

内部スキーマを変更しても、概念スキーマや外部スキーマに影響を与えにくくする。
これを物理的データ独立性という。

保存方法を変えても、使う側はあまり影響を受けないってこと?

もう1つは
概念スキーマを変更しても、外部スキーマに影響を与えにくくする。
これを論理的データ独立性という。

データベース全体の構造を少し変えても、利用者ごとの見え方には影響を出しにくくするってことか。

3つの違いをもう一度整理

もう一回まとめると、これであっている?

スキーマ何を表す?
外部スキーマ利用者ごとの見え方人事部用画面、経理部用画面、一般社員用画面
概念スキーマデータベース全体の論理構造社員、部署、給与、勤怠の関係
内部スキーマ実際の保存方法ファイル配置、インデックス、保存形式

いいね。
この3つは、上から見る人が違うと考えると覚えやすいよ。

覚え方

用語覚え方
外部スキーマ外から見る人用
概念スキーマ全体の考え方
内部スキーマ中でどう保存するか

外部は外から見る。
概念は全体の設計思想。
内部は中身の保存方法。
これなら覚えやすいかも。

いいね。
特に大事なのは、概念スキーマが中心になるということだね。

外部スキーマは人によって違う見え方。
内部スキーマは裏側の保存方法。
その間に、全体設計として概念スキーマがあるってこと?

そうそう。
かなり理解できてるね。

まとめ

種類一言でいうと視点
外部スキーマ利用者ごとの見え方ユーザー・アプリ
概念スキーマデータベース全体の設計データベース設計者
内部スキーマ実際の保存方法コンピュータ内部

一言で覚えるなら
外部スキーマは「見せ方」
概念スキーマは「全体設計」
内部スキーマは「保存方法」

です。

ABOUT ME
クマノくらげ
クマノくらげ
難しいIT用語やビジネス用語を、できるだけ身近な例えで解説するブログです。 「専門用語を見ると眠くなる人」でも読めるように、画像や会話形式を多めにしています。 AWS12冠達成済み。
記事URLをコピーしました