Instiq
第1章 · データベース方式とデータモデル·v1.0.0·更新 2026/7/10·読了目安 約14分

変更要約: 初版

1.23層スキーマとデータ独立性

この節の要点

外部スキーマ概念スキーマ内部スキーマからなる3層スキーマの構造と、それぞれの層の変更が他層に波及しない論理的データ独立性物理的データ独立性を理解し、「このスキーマ変更はどの層に影響が及ぶか」を判断する力を学びます。

DBAやアプリケーション開発者が日常的に直面するのは「このテーブルに列を追加したら、既存のアプリは壊れないか」「格納方式を変えて性能を改善したいが、アプリのSQLは書き直しが必要か」という変更の影響範囲の判断です。3層スキーマは、まさにこの判断のための設計思想であり、単なる用語の暗記ではなく、変更がどの層で止まり、どの層に波及するかを見極める枠組みとして理解する必要があります。

1.2.13層スキーマの構造

  • 3層スキーマ=ANSI/SPARCが提唱したデータベースの論理設計モデル。上から外部スキーマ(ユーザー/アプリごとの視点=ビューや個別画面が見るデータ構造)・概念スキーマ(組織全体で共有する論理的なデータ構造=テーブル定義や制約)・内部スキーマ(実際の格納形式=ファイル構成・索引・格納順序)の3層で構成される。
  • 各層は写像(マッピング)によって連結される=外部スキーマは概念スキーマへの写像を通じてデータを取得し、概念スキーマは内部スキーマへの写像を通じて実際の格納データにアクセスする。この写像こそが「ある層の変更を他層に波及させない」仕組みの実体である。

1.2.2論理的データ独立性と物理的データ独立性

  • 論理的データ独立性=概念スキーマを変更しても、外部スキーマ(アプリ/ビュー)に影響を与えない性質。例えば既存テーブルに新しい列を追加しても、その列を参照しない既存のビューやSQLは変更不要で動き続ける(写像を調整すれば吸収できる)。
  • 物理的データ独立性=内部スキーマ(格納形式・索引・ファイル配置)を変更しても、概念スキーマ(テーブル定義)に影響を与えない性質。例えば性能改善のために索引を追加・変更したり、テーブルを別のディスク領域に再配置しても、SQLの記述(テーブル定義に基づく問合せ)は変更不要。
試験ポイント

「3層スキーマ(外部/概念/内部)の各層が何を表すか」「論理的データ独立性=概念スキーマ変更が外部スキーマに波及しない」「物理的データ独立性=内部スキーマ変更が概念スキーマに波及しない」が最頻出です。具体的な変更例(列追加・索引変更・ファイル再配置)がどちらの独立性に該当するかを即座に判定できるようにしましょう。

あなたは基幹システムのDBAで、性能改善のため「注文明細テーブルの検索を高速化する新しい索引を追加し、さらに格納ファイルを高速なストレージ領域に再配置したい」という提案を受けました。まず判断すべきは、この変更が内部スキーマ(格納形式・索引・ファイル配置)のみに閉じているかどうかです。索引の追加やファイルの物理的な再配置は、テーブルの論理的な定義(列名・データ型・制約)を変えるものではないため、物理的データ独立性により、アプリケーション側のSQLは一切変更不要と判断できます。次に、営業部門から「注文明細に新しい列(割引適用フラグ)を追加してほしいが、既存の請求書発行アプリのSQLは絶対に壊したくない」という要件が来たとします。これは概念スキーマ(テーブル定義)の変更であり、新しい列を参照しない既存アプリへの影響は、論理的データ独立性によって理論上は吸収可能です。ただし実務では、SELECT * を使っているアプリや、列の物理的な並び順に依存した処理が残っている場合、理論上の独立性があっても意図せず影響を受けることがあります。ここで「3層スキーマがあるから列を追加しても絶対に何も壊れない」と過信するのは危険で、独立性は写像の設計と実装の丁寧さに支えられているという前提を忘れてはいけません。

変更内容該当スキーマ層関連する独立性アプリへの理論上の影響
索引の追加・変更内部スキーマ物理的データ独立性影響なし
格納ファイルの再配置内部スキーマ物理的データ独立性影響なし
テーブルへの列追加概念スキーマ論理的データ独立性新列を参照しないアプリは理論上影響なし
ビュー定義の変更外部スキーマ(外部スキーマ内で完結)そのビューを使うアプリのみ影響
注意

ひっかけ: 「テーブルに索引を追加するのは概念スキーマの変更であり、論理的データ独立性の話である」は誤りです——索引は内部スキーマ(格納・アクセス方式)の要素であり、物理的データ独立性の話です。また「3層スキーマがあれば、どんな変更もアプリケーションに一切影響しない」も誤り=SELECT * の使用や列順依存など、実装の書き方次第で理論上の独立性が破られるケースがある点に注意してください。

外部/概念/内部スキーマの図。
スキーマを3層で分ける

1.2.3この節のまとめ

  • 3層スキーマ外部スキーマ(アプリ視点)・概念スキーマ(論理的な全体構造)・内部スキーマ(実際の格納形式)の3層
  • 物理的データ独立性=内部スキーマの変更(索引・格納方式)が概念スキーマに影響しない。論理的データ独立性=概念スキーマの変更(列追加等)が外部スキーマに影響しない
  • 理論上の独立性は写像の設計と実装(SELECT * の不使用等)に支えられる前提であり、無条件に何も壊れないと過信しない

進捗の記録にはログインが必要です。

理解度チェック

(軽い確認用)

Q1. DBAが性能改善のため、注文明細テーブルに新しい索引を追加し、格納ファイルを高速なストレージ領域へ再配置することにした。この変更についての判断として最も適切なものはどれか。

Q2. 営業部門から「注文明細テーブルに新しい列(割引適用フラグ)を追加したいが、既存の請求書発行アプリのSQLを絶対に壊したくない」という要望があった。この状況の説明として最も適切なものはどれか。

Q3. 3層スキーマにおける「外部スキーマ」の説明として最も適切なものはどれか。

理解度を確認第1章「データベース方式とデータモデル」の問題を解く