ANSI/SPARC 3層スキーマ(Three-Schema Architecture)は、データベースの構造を外部スキーマ(External)、概念スキーマ(Conceptual)、内部スキーマ(Internal)の3つの層に分けて整理する考え方です。アプリケーションが参照するデータの見え方(外部)、データベース全体の論理構造(概念)、物理的な格納やアクセス方法(内部)を切り分けることで、変更が他の領域へ及ぶ範囲を抑えやすくします。
ANSI/SPARC 3層スキーマの主な目的は、論理的独立性と物理的独立性、いわゆるデータ独立性を高める点にあります。たとえば、画面表示項目の追加といったアプリケーション側の要件変更や、ストレージ構成・索引の見直しがあっても、他の層への影響を最小限に抑えることを想定しています。
外部スキーマは、ユーザーやアプリケーションから見たデータの見え方を定義する層で、実務では「ビュー層」と呼ばれることが多い領域です。部署や役割、用途によって必要な項目や表示方法が異なるため、外部スキーマは利用者ごとに複数定義されることがあります。
外部スキーマでは、必要な列だけを表示したり、条件に合致する行だけを対象にしたり、機密項目を非表示にしたりといった制御が可能です。たとえば、営業部門は顧客の連絡先まで参照でき、購買部門は請求関連の情報のみ参照する、といった分離が考えられます。これにより、操作性とアクセス制御を両立しやすくなります。
概念スキーマは、データベース全体の論理的な構造を定義する層です。テーブル(またはエンティティ)、属性、主キー・外部キー、リレーション、制約(NOT NULLや参照整合性など)といった、データの意味と関係をここで整理します。
外部スキーマが利用者ごとの見え方を定めるのに対し、概念スキーマはデータベースとして何を正とするかを定義する中心的な位置づけになります。たとえば、「注文は必ず顧客にひも付く」「出荷日は注文日より前にはならない」といった業務ルールを、データ構造として表現します。これにより、アプリケーションごとの差異によってデータの整合性が崩れるのを防ぎやすくなります。
実務では、DBMSが概念スキーマを明示的に区分して提供するとは限りません。ER図や論理設計書、DDL(CREATE TABLEなど)が、概念スキーマの表現として扱われるケースが一般的です。
内部スキーマは、データをどのように物理的に格納し、どのようにアクセスするかを定義する層です。索引(B+木など)の設計、パーティション構成、ファイル配置、テーブルスペースといったストレージ管理、キャッシュやI/Oの考慮、バックアップやリカバリ方針などが対象になります。
内部スキーマの主な関心事は、性能と運用性です。検索頻度の高い列への索引付与、更新が集中するテーブルの配置調整、バックアップ時間を考慮した構成設計などは、内部スキーマ側で検討されます。
3層スキーマは、層を分けることで変更に強い設計を目指します。ただし、各層は完全に切り離されているわけではなく、マッピングによって相互に対応付けられています。
もっとも、すべての変更が影響ゼロで済むわけではありません。大規模な正規化やキー設計の変更などは、外部スキーマやアプリケーションの前提に影響する場合があります。3層スキーマは、影響を小さく抑えるための設計指針として理解するのが現実的です。
外部スキーマの代表例は、用途別のビューです。同じ「顧客一覧」でも、コールセンターでは連絡先や応対履歴が重要であり、経理では請求先や支払い状況が重視されます。元データは共通のまま、必要な列だけを提供するビューを用意することで、操作性と安全性を両立できます。
概念スキーマでは、「顧客」「注文」「商品」「在庫」といったエンティティの関係を定義し、整合性を保つための制約を設けます。たとえば、注文テーブルに顧客ID(外部キー)を持たせ、存在しない顧客にひも付く注文が登録できないようにする設計が典型です。これにより、利用するアプリケーションが増えても、データの正しさを保ちやすくなります。
内部スキーマでは、検索や集計、更新の傾向に合わせて索引やパーティション、配置を調整します。日付条件での検索が多い場合は日付列の索引やパーティションが有効ですし、書き込みが多い場合は索引数を抑える設計が求められます。これは主にDBAやインフラ担当が、運用や監視とあわせて担う領域です。
3層で整理すると、外部の見え方を保ったまま、内部の索引や配置を見直して性能を改善するといった施策を検討しやすくなります。アプリケーションの画面は変えずに、内部設計の調整によって応答時間を短縮するケースが代表例です。
最大の利点は、変更の影響を局所化しやすい点です。ストレージの入れ替えや索引設計の見直しといった内部層の変更を行っても、概念層や外部層を大きく変えずに済む可能性が高まります。また、概念スキーマの変更も、外部スキーマで吸収できればアプリケーション改修を抑えられます。
外部は利用者視点、概念は業務ルールと整合性、内部は性能と運用といった形で責務を分けやすくなります。関係者が多いプロジェクトでも、設計レビューや障害対応の際に「どの層の問題か」を切り分けやすくなります。
層を意識した設計では、マッピングや変更管理への配慮が増えます。小規模または短期間のシステムでは、設計コストが先行して負担に感じられる場合もあります。独立性を保つためには、ビュー設計や命名規約、変更手順の整備など、運用面の成熟も欠かせません。
3層スキーマは、特定のDB製品に依存する機能ではなく、データベース設計を考えるための基本的な枠組みとして参照されています。RDBに限らず、クラウド環境や分散構成においても、「見え方」「論理」「物理」を分けて考えることで、変更や運用、責任分界を整理しやすくなる場面があります。
クラウド環境では物理構成が抽象化される一方、性能やコストを考慮した内部層の設計は依然として重要です。概念層を設計書やスキーマ管理で明確にし、外部層をAPIやビューとして安定提供する考え方は、データ活用が広がるほど効果を発揮します。
スキーマレスと呼ばれるデータストアでは、固定的なスキーマ定義を持たない傾向があります。ただし、実際にはアプリケーション側やデータ契約の形で、概念層に相当する整理が行われることもあります。3層スキーマは、そのような場合でも、責務の所在を整理する視点として利用できます。
技術や実装が変わっても、データの見え方、論理構造、物理構成を切り分けて考える発想自体は残りやすい分野です。3層スキーマは、設計や運用に関する議論を噛み合わせるための共通言語として、今後も参照され続けるでしょう。
特定製品の機能というより、データベース設計を整理するための考え方(アーキテクチャ)です。
実務ではビューで表現されることが多いですが、外部スキーマは利用者から見た見え方全体を指す概念です。
テーブルや属性、キー、関係、制約など、データの意味と関係を定義する論理構造が含まれます。
索引、パーティション、配置、ストレージ構成、バックアップやリカバリ方針など、物理的な格納とアクセス方法が含まれます。
内部層の変更による影響を、概念層や外部層に広げずに済ませやすい性質を指します。
概念層の変更を、外部スキーマの調整で吸収し、アプリケーション側の影響を抑えやすくする性質です。
完全にゼロになるとは限りませんが、影響を小さく抑えるための設計指針として有効です。
ありますが、過剰設計にならないよう、基本的な切り分けを意識する程度から始めるのが現実的です。
関係があります。固定スキーマが薄くても、見え方や論理、格納方法は別の形で整理されます。
ER図や論理設計書、DDLとして表現し、変更管理とあわせて運用するのが一般的です。