3層スキーマとは(全体像)
3層スキーマとは、データベースを「だれが・どんな目的で見るか」によって3つの見方に分けて整理する考え方だよー。1975年に「ANSI/SPARC」という団体が提案した設計の枠組みなのー。
身近にたとえると、1軒の家を3つの見方で見る感じ。住む人が見る「部屋(使い勝手)」、設計者が見る「間取り図(全体の構造)」、工事の人が見る「配管や基礎(実際の作り)」だよー。同じ家でも、見る人によって関心がちがうのー。
押さえるのは、外部・概念・内部の3つの層と、変更の影響をおさえるデータ独立性だよー。
詳しく:3つの層と2つの独立性だけ覚えれば戦える
ここが記事の心臓部。まず3つの層を見ていこーね。
3つのスキーマの役割
| 層 | だれの視点 | 中身 |
|---|---|---|
| 外部スキーマ | ユーザー・アプリ | 見たい部分だけの見え方(ビュー) |
| 概念スキーマ | 設計者(全体) | データベース全体の論理設計(ER図・正規化) |
| 内部スキーマ | システム(物理) | 実際の保存方法(インデックス・ストレージ) |
外部はユーザーの見え方、概念は全体の論理設計、内部は実際の保存方法——この3段の役割が一番大事だよー。
次に、3層に分けるとうれしいデータ独立性だよー。これは「ある層を変えても、ほかの層に影響が及ばない」しくみのことなのー。
2つのデータ独立性
| 独立性 | どこの変更を吸収するか |
|---|---|
| 論理的独立性 | 概念スキーマ(全体の論理設計)を変えても、外部スキーマ(アプリの見え方)に影響しない |
| 物理的独立性 | 内部スキーマ(保存方法)を変えても、概念スキーマ(論理設計)に影響しない |
ここでひっかけが「独立性とは、それぞれが無関係だという意味」という誤解だよー。そうではなくて、ある層を変えたとき、その影響がほかの層に波及しないようにすることなのー。だから保守(手直し)がラクになるんだよー。
わかりやすく言い換えると
要するに、家の3つの見方でイメージするとラクだよー。
①外部スキーマ … 住む人が見る「部屋(使い勝手)」=ユーザーの見え方
②概念スキーマ … 設計者が見る「間取り図(全体の構造)」=論理設計
③内部スキーマ … 工事の人が見る「配管や基礎(実際の作り)」=物理的な保存方法
そして物理的独立性は、「配管工事のやり方を変えても、部屋の使い勝手は変わらない」イメージ。論理的独立性は、「間取りを少し変えても、住む人の部屋の見え方は保たれる」イメージだよー。
つまり、3層に分けておくから、片方の作りを直しても、もう片方に影響が及ばずにすむ——これが試験の急所なのー。
試験のツボ
🔴 一番出る:3つの層の役割
①外部スキーマ = ユーザー・アプリの見え方(ビュー)
②概念スキーマ = データベース全体の論理設計
③内部スキーマ = 実際の保存方法(物理)
🔴 次に出る:2つのデータ独立性
①論理的独立性 = 論理設計を変えてもアプリの見え方に影響しない
②物理的独立性 = 保存方法を変えても論理設計に影響しない
🟡 押さえると安定:分けるねらいは保守性
①ある層の変更が、ほかの層に波及しないようにする
②そのおかげで手直しがしやすくなる
よくある間違い
①「3層スキーマとは、3つのテーブルのことである」→ ✗ 3つのテーブルではなく、3つの「見方(抽象レベル)」のこと。
②「データ独立性とは、各層がたがいに無関係という意味である」→ ✗ 変更の影響がほかの層に波及しないようにすること。無関係という意味ではない。
③「ユーザーの見え方を決めるのは内部スキーマである」→ ✗ ユーザーの見え方は外部スキーマ。内部スキーマは実際の保存方法。
試験での出題パターン
実際の問題でたしかめてみよう。
オリジナル問題1(3つの層)
3層スキーマの3つの層に関する次の記述のうち、正しいものはどれか。
- 3層スキーマの3つの層は、すべて画面の明るさを段階で決めるための設定だとされているものなのである
- 3層スキーマの3つの層は、すべて音の大きさを段階で決めるための機能だとされている
- 3層スキーマの3つの層は、画面・音・電源という3つの装置を表すものだとされているのである
- 3層スキーマは外部(ユーザーの見え方)・概念(全体の論理設計)・内部(保存方法)に分かれる
解答は 4 だよー。
3層スキーマは、外部(ユーザーの見え方)・概念(全体の論理設計)・内部(実際の保存方法)の3つに分かれるのー。家でいうと「部屋・間取り図・配管」の3つの見方だよー。
選択肢1の「明るさの設定」、選択肢2の「音の大きさ」、選択肢3の「3つの装置」はどれも誤りなのー。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 画面の明るさの設定ではない |
| 2 | ✗ | 音の大きさの機能ではない |
| 3 | ✗ | 装置を表すものではない |
| 4 | ✓ | 外部・概念・内部の3つの見方に分かれる |
オリジナル問題2(物理的独立性)
データ独立性に関する次の記述のうち、正しいものはどれか。
- 物理的独立性とは、保存方法(内部)を変えても論理設計(概念)に影響しないことである
- 物理的独立性とは、画面が必ず点滅してしまうという不具合のことだとされているものなのである
- 物理的独立性とは、音が必ず二重に鳴ってしまう不具合のことだとされている
- 物理的独立性とは、保存した文字が必ず全部消えてしまうことだとされているものである
解答は 1 だよー。
物理的独立性は、保存方法(内部スキーマ)を変えても、論理設計(概念スキーマ)に影響しないことなのー。配管工事のやり方を変えても、部屋の使い勝手は変わらないイメージだよー。
選択肢2の「点滅」、選択肢3の「二重に鳴る」、選択肢4の「文字が消える」はどれも誤りなのー。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✓ | 保存方法を変えても論理設計に影響しない |
| 2 | ✗ | 画面の不具合のことではない |
| 3 | ✗ | 音の不具合のことではない |
| 4 | ✗ | 文字が消えることではない |
オリジナル問題3(3層の意味)
3層スキーマの意味に関する次の記述のうち、正しいものはどれか。
- 3層スキーマとは、必ず3つのテーブルを作らなければならないという決まりのことだとされている
- 3層スキーマとは、データベースを3つの見方(抽象レベル)に分けて整理する考え方である
- 3層スキーマとは、画面を必ず3つに分割して表示するための設定のことなのである
- 3層スキーマとは、データを必ず3回ずつ保存しなければならないという決まりのことである
解答は 2 だよー。
3層スキーマは、データベースを3つの見方(抽象レベル)に分けて整理する考え方なのー。「3つのテーブル」という意味ではないから、そこがひっかけだよー。
選択肢1の「3つのテーブル」、選択肢3の「画面を3分割」、選択肢4の「3回ずつ保存」はどれも誤りなのー。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 3つのテーブルという意味ではない |
| 2 | ✓ | 3つの見方(抽象レベル)に分ける考え方 |
| 3 | ✗ | 画面を分割する設定ではない |
| 4 | ✗ | 3回保存する決まりではない |
まとめ
押さえどころ
- 🔴 3つの層 = 外部(ユーザーの見え方)・概念(全体の論理設計)・内部(実際の保存方法)。
- 🔴 2つの独立性 = 論理的(論理設計を変えてもアプリに影響しない)・物理的(保存方法を変えても論理設計に影響しない)。
- 🟡 ねらいは保守性 = 変更の影響をほかの層に波及させないので、手直しがしやすい。「3層=3テーブル」ではない。
次に学ぶ
- ビュー・マテリアライズドビュー ── 外部スキーマを実際に作るしくみ。ユーザーごとの見え方をビューで用意する。
- 正規化(詳細) ── 概念スキーマを作るときの、表を上手に分けるルール。
- インデックスの種類 ── 内部スキーマで検索を速くするしくみ。
執筆: SikakuQuest編集部