スキーマとは、データベースなどの「構造」を指す言葉です。また、データベースにおけるデータの格納形式などのメタデータを定義したものであり、データベース管理システムでサポートする形式言語で記述します。
データベースから割り当てられる構造。OSでいうところのディレクトリが、データベースにおけるスキーマに近い存在です。
※本ページにはPRが含まれます。
目次
スキーマの階層
スキーマはデータベース構造を荒らしており、その抽象化レベルに応じて階層が分けられています。階層化がなされることで、データベースの保守運用が容易になります。
自分の作業がどの段階で必要になるのか、その確認が容易だからです。
データベースのスキーマ階層を、一つずつ確認しておきましょう。
概念スキーマ
概念スキーマとは、データベースに必要な情報をデータベースで抽象化、その抽象化した概念と概念間を定義したものです。
概念スキーマが指すのは組織を指す概念スキーマの抽象レベルは曖昧です。そのデータモデルは利用者によってモデルの変更も変わるという、極めて抽象的な概念です。
論理スキーマ
対象領域の特定のデータ管理技術を前提として記述されるデータモデルです。データベース管理製品に依存しないで記述できるのが特徴です。オブジェクトモデルならクラスやXMLタグを用いて記述するので概念スキーマが抽象的であるのと対照的です。
物理スキーマ
特定のデータ管理技術の観点で記述されるデータモデルが、物理スキーマです。物理スキーマで定義するのは、ストレージにデータがどのように格納されるのか、それを具体的に定義します。
ANSIでの方式
ANSIやSPARCでは、概念スキーマ、外部スキーマ、内部スキーマの3層でスキーマを定義します。
外部スキーマ
外部スキーマは、ユーザーからみたデータベースの記述です。
データベースを用いてアプリケーションの作成を行ったり、データベースから情報を取り出す際には、外部スキーマを詳しく知るだけで事立ちます。
外部スキーマとデータディクショナリ
外部スキーマとデータディクショナリはどう違うのか、考えてみましょう。
どちらもデータ名や形式などメタデータを記録したものです。しかし実務レベルで考えると、これらに違いが見つかります。
データディクショナリは主にユーザーに向けた「データ辞書」の役割を担っています。データベース内に格納された商品の定義や商品コードの体系、商品の利用法などデータに関する細かい情報が必要。
しかし外部スキーマには、データベースにおいてデータを参照されることが優先されるもの。最低限必要なデータのみ搭載して、データベースでの処理効率を優先したものとなるのです。
外部スキーマの補足的な役割を担うのが、データディクショナリだという認識を持っておけば、間違いはないでしょう。
概念スキーマ
内部スキーマと外部スキーマの中間に位置するのがこの概念スキーマ。ER図やクラス図はこの概念スキーマに位置します。
内部スキーマ
概念スキーマを具体的に実現するために必要なのがこの内部スキーマです。内部スキーマは、外部スキーマと概念スキーマとは異なり、ハードウェアやOSに依存するという特徴があります。
Oracleにおけるスキーマ
代表的なデータベース「Oracle」を例にスキーマを考えてみましょう。
Oracleデータベースがオーナーだとして、ユーザーがOracleから割り振られる賃貸の一室。それがスキーマです。
スキーマオブジェクトには多くの種類があり、ビューやトリガーJavaクラス関連がここに含まれます。スキーマはユーザーに属して割り当てられるので、「空きテナント」のようなスキーマは存在しません。
プロファイルやロール、コンテキストなどは、スキーマに分類されません「非スキーマ」という扱いを受けるのです。
スキーマレスデータベースも存在する
スキーマは再三言うようですが、データベースの構造を定義したもの。データベースに格納されているデータ、それをどのように管理するか、それを定義したものとなります。
しかしデータベースの中には、スキーマを必要としないデータベースが存在します。投入したデータに合わせて、データ絡むを自由に変更することができるため、スキーマが必要ないのです。
これなら、データ格納前のスキーマ設計に関わる手間と時間を大きく減らすことができます。
まとめ
スキーマとは、データベースにおいて「構造」などの意味を指す言葉。
データベース内に搭載するデータのルールを定義するものです。スキーマには役割ごとに階層が分かれています。データベースエンジニアなら、このデータベースの構造を細かく理解しておくことを求められるでしょう。