スキーマとは
- 「概要、要旨」といった意味を持つ言葉
- DBの構造や仕様を定義するもの
(↑データの性質、形式、他のデータの関連などのデータ定義の集合)
3層スキーマ
- 標準的に使用されている、ANSI/X3/SPARC(Standards Planning And Requirements Committee)規格では、3層スキーマ構造をとっている
(ANSI:アンシー、SPARC:スパーク) - 以下の3層に定義を分けることで、データの独立性を高めている
- 外部スキーマ
- 概念スキーマ
- 内部スキーマ
外部スキーマ
- SELECT結果がこれに当たるイメージ
- ビュー表がこれに該当する
- 利用者(個々のプログラムやユーザ)の必要とするデータの見方を表現する
- プログラムやユーザに対して必要なデータだけを提供
- プログラムに加えた変更は、このスキーマまでしか影響しない
概念スキーマ
- DBの表の定義(テーブル)がこれに当たるイメージ
- 対象となる外界の事象を抽象化してデータの論理的な構造を定義する
→要するにDB本体のこと - データの論理的関係(←ER図で表せるようなやつ)を表現する
- プログラムからも、ハードウェアからも切り離されているため、どこにも依存せず、データの独立性が保たれている
内部スキーマ
- DBに登録しているデータの物理ファイル(コミット、保存したデータ)のイメージ
(実ファイル、ハードディスク上に書いてある情報のこと) - データの物理的関係を表現する
- 物理的にどう記憶させるかの定義をする
- ハードウェア的な変更はこのスキーマで影響を吸収する
データの独立性
- ビュー(外部スキーマ、SELECT結果)を弄っても、DBのデータ格納方法(概念スキーマ、テーブル)は変わらない
(↑プログラムに加えた変更は、外部スキーマまでしか影響しない) - 物理的に記憶(内部スキーマ、コミット、保存したデータ)させているハードウェアが変わっても、プログラムの修正は必要ない
(↑ハードウェア的な変更は、内部スキーマで影響を吸収する)
備考
- 上記の「スキーマ」は、A5Mk2に表示される「カレントスキーマ」とは別物
- Oracleの場合は、
1つのOracleDBの中に、いくつもDBが立てられる。
この、ぽこぽこ立てたDBのことを、「スキーマ」と製品上は呼んでいる。
そのため、A5Mk2で出ている「カレントスキーマ」とは、OracleDBやMySQL上に立てた複数のDBのうち、どれを見ているのかを表している!!
→スキーマ = DBオブジェクト - MySQLの場合は、スキーマではなく「データベース」と呼んでいる。
この辺りは、製品によって呼び方がまちまち。
参考サイト
MySQLでは「データベース」という言葉は「スキーマ」と同じ意味で使われています。