3層スキーマとは?外部・概念・内部スキーマの違いを初心者向けに画像多めで解説!
3層スキーマとは、データベースを3つの視点に分けて考える仕組みです。
外部スキーマは、利用者ごとの見え方。
概念スキーマは、データベース全体の論理構造。
内部スキーマは、実際の保存方法。
この3つを分けることで、
保存方法を変えても利用者の画面に影響を出しにくくしたり、
利用者ごとの見え方を変えてもデータベース全体の構造に影響を出しにくくしたりできます。
つまり、3層スキーマは「変更に強いデータベース」にするための考え方です。
3層スキーマとは?外部・概念・内部の3つに分ける考え方

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

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

どの視点から見るか?

そう。
同じデータベースでも、
- 利用者から見た姿
- システム全体として見た姿
- コンピュータの中で実際に保存されている姿
があるんだよ。

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

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

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

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

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

設計図?

うん。
たとえばデータベースには、
- どんなテーブルがあるか
- どんな項目があるか
- データ同士がどう関係しているか
- どう保存するか
- 誰にどの情報を見せるか
みたいな決まりがあるよね。
そういう構造やルールを表したものがスキーマなんだ。


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

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

利用者ごとに見える姿?

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

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


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

そうだね。
「見える情報を絞る」という意味では、Excelのフィルタに近いイメージだよ。
ただ、外部スキーマはフィルタのように単に行を絞るだけではなく、必要な項目だけを見せたり、見せ方を変えたりするものだよ。
同じ社員データをもとに、部署ごとに別の表示用シートを用意する感じに近いかな。
たとえば、人事部には住所や給与まで見せる。
経理部には給与や振込先を見せる。
一般社員には氏名や部署、メールアドレスだけを見せる、という感じだね。

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

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

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

論理的な設計って?

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

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

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


たとえば会社のデータベースなら、
- 社員テーブル
- 部署テーブル
- 給与テーブル
- 勤怠テーブル
があって、
社員はどの部署に所属しているか、
給与データはどの社員に紐づくか、
勤怠データはどの社員のものか、
みたいな関係を決める。

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

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

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

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


うん。
たとえば、
- データをどのファイルに保存するか
- どの順番で保存するか
- インデックスをどう作るか
- ディスク上にどう配置するか
- 検索を速くするためにどう管理するか
みたいな部分だね。

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

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

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

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

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

その裏側の保存方法を表すのが、内部スキーマだよ。
レストランに例えると


整理するためにレストランに例えてみようか。
レストランには、まずお客さん用のメニューがあるよね。

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

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

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

そう。
次に、店全体の管理表を考えてみよう。
- 料理名
- 価格
- 材料
- 原価
- 在庫
- 担当者
こういう情報を店全体で管理している。
これが概念スキーマに近い。

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

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

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


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

完全にバラバラというより、階層になっているイメージだね。
外部スキーマ
利用者ごとの見え方
↓
概念スキーマ
データベース全体の論理構造
↓
内部スキーマ
実際の保存方法

上に行くほど利用者に近くて、下に行くほどコンピュータ内部に近いんだね。
3層スキーマの最大の目的は「変更に強くすること」

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

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

変更に強くする?


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

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

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

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

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

データ独立性って何?

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

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

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

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

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

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

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

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

いいね。
この3つは、上から見る人が違うと考えると覚えやすいよ。
覚え方
| 用語 | 覚え方 |
|---|---|
| 外部スキーマ | 外から見る人用 |
| 概念スキーマ | 全体の考え方 |
| 内部スキーマ | 中でどう保存するか |

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

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

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

そうそう。
かなり理解できてるね。
まとめ
| 種類 | 一言でいうと | 視点 |
|---|---|---|
| 外部スキーマ | 利用者ごとの見え方 | ユーザー・アプリ |
| 概念スキーマ | データベース全体の設計 | データベース設計者 |
| 内部スキーマ | 実際の保存方法 | コンピュータ内部 |
一言で覚えるなら
外部スキーマは「見せ方」
概念スキーマは「全体設計」
内部スキーマは「保存方法」
です。

