データベース基本概念

データ独立性 でーたどくりつせい

スキーマ論理的独立性物理的独立性ANSI/SPARCアーキテクチャ三層スキーマDBMS
データ独立性について教えて

簡単に言うとこんな感じ!

データベースの「中身の保存方法」を変えても、アプリ側は何も変えなくてOK!っていう仕組みだよ。引越しで荷物の置き場所が変わっても、荷物の中身は変わらない——そんなイメージで「データとプログラムを切り離せる」のがデータ独立性なんだ!


データ独立性とは

データ独立性(Data Independence)とは、データベースの構造や保存方式を変更しても、それを使うアプリケーションプログラム側に影響を与えないようにする性質のことです。データベース管理システム(DBMS)が担う最も重要な役割のひとつとされています。

従来、ファイルを直接扱うプログラムでは、データの格納形式が変わるたびにプログラムも修正しなければなりませんでした。それでは保守コストが膨大になります。データ独立性を実現することで、データ側の変更がプログラム側に波及しない構造を作り出し、システム全体の柔軟性と保守性を大幅に高めます。

データ独立性は「論理的データ独立性」と「物理的データ独立性」の2種類に分けられます。どちらが守られているかによって、変更の影響範囲がどこまで遮断されるかが決まります。


2種類のデータ独立性

種類正式名称意味変更例
論理的独立性Logical Data Independence概念スキーマを変えても外部スキーマ(アプリ)に影響しないテーブルに列を追加・削除しても既存のアプリが壊れない
物理的独立性Physical Data Independence内部スキーマを変えても概念スキーマに影響しないストレージ変更・インデックス追加してもテーブル定義は変わらない

覚え方

論は外を守り、物は中を守る」と覚えよう!

  • 理的独立性 → 部(アプリ)を変更から守る
  • 理的独立性 → 内部(ディスク・索引)の変更をで吸収する

論理的独立性のほうが実現が難しく、高度な独立性とされています。

独立性の強さ比較

独立性レベル実現の難易度守られる範囲
物理的データ独立性★★☆(比較的容易)物理層↔概念層の分離
論理的データ独立性★★★(高難度)概念層↔外部層の分離

歴史と背景

  • 1960年代 — プログラムがファイルを直接読み書きする時代。データ形式が変わるたびに全プログラムを修正する必要があり、保守コストが社会問題化
  • 1970年 — Edgar F. Coddが関係モデル(リレーショナルモデル)を提唱。データとその操作を論理的に分離する概念が広まる
  • 1975年ANSI/SPARC委員会が三層スキーマアーキテクチャを提案。データ独立性を体系的に定義する枠組みが確立
  • 1980年代 — Oracle・DB2などの商用RDBMSが普及し、データ独立性が実用レベルで実現される
  • 現在 — クラウドデータベースやNoSQLでも「ストレージ層とアプリ層の分離」という形でデータ独立性の思想が引き継がれている

三層スキーマアーキテクチャとの関係

データ独立性を実現する基盤となるのが、ANSI/SPARCの三層スキーマアーキテクチャです。データベースを3つの層(スキーマ)に分けて管理することで、各層の変更が他の層へ波及しないようにします。

外部スキーマ(External Schema) アプリやユーザーが見るビュー・クエリの定義 例: 「売上レポート用ビュー」「在庫確認用ビュー」 論理的データ独立性 概念層を変えても外部層には影響しない 概念スキーマ(Conceptual Schema) データ全体の論理的な構造・テーブル定義・制約 例: 「顧客テーブル」「注文テーブル」の定義 物理的データ独立性 内部層を変えても概念層には影響しない 内部スキーマ(Internal Schema) データの物理的な格納方法・インデックス・ファイル構造

各スキーマの役割まとめ

スキーマ別名担当変更例
外部スキーマビューアプリ・ユーザーごとのデータの見え方レポート用ビューの追加
概念スキーマ論理層データ全体の論理構造(テーブル・制約列の追加・テーブルの統合
内部スキーマ物理層ディスク上の格納形式・インデックスSSDへの移行・索引の最適化

実務での重要ポイント

データ独立性が確保されていないと、次のような問題が発生します。

【データ独立性がない場合の悪循環】

ストレージ変更
  └→ DBのファイル構造が変わる
        └→ SQLのテーブル定義を修正
              └→ アプリのコードを修正
                    └→ テスト・リリースやり直し
                          └→ コスト爆発 💥

逆にデータ独立性が高いシステムでは:

【データ独立性がある場合】

ストレージ変更
  └→ 内部スキーマだけ更新(DBMSが吸収)
        └→ 概念スキーマ・アプリは一切ノータッチ ✅

システム発注・選定の観点では、「使用するDBMSが三層スキーマに対応しているか」「ビュー機能が充実しているか」を確認するだけで、長期的な保守コストを大幅に抑えられます。


関連する規格・RFC

規格内容
ANSI/SPARC Report(1975年)三層スキーマアーキテクチャを定義。データ独立性の理論的基盤を確立した報告書
ISO/IEC 9075(SQL標準)SQLにおける論理的データ独立性(ビュー・スキーマ分離)を規定

関連用語

  • 三層スキーマ — ANSI/SPARCが定めたデータベースの3層構造モデル
  • スキーマ — データベースの構造定義そのもの。外部・概念・内部の3種がある
  • DBMS — データベース管理システム。データ独立性を実現する中心的存在
  • ビュー — 外部スキーマの具体的な実装手段。テーブルの仮想的な見え方を定義する
  • リレーショナルモデル — Coddが提唱したデータの論理的表現モデル
  • インデックス — 内部スキーマの代表例。物理的な検索最適化構造
  • 正規化 — 概念スキーマ設計の基本技法。データの冗長性を排除する