データベースを学習していると「スキーマ」って言葉が出てきます。言葉としてはよく聞くのですが、ちょっと捉えどころが無い言葉ので、今回はこのスキーマを調べてみました!
データベースの概念や構造?
スキーマとはwikiで調べると「データベースの構造であり、データベース管理システム (DBMS) でサポートされている形式言語で記述される。」とあります。すごく簡単に言うとデータベースの設計図のようなものですね。
データベースの設計自体は別の記事で解説してますが、「概念設計、論理設計、物理設計」で完成する設計図がそれぞれ「概念スキーマ、外部スキーマ、内部スキーマ」に対応するようですね。
3層で構成されているので、「3層スキーマアーキテクチャ」と呼びます。
3層スキーマ構造
それぞれのスキーマを図でまとめてみました。
概念スキーマで定義された論理データから必要なデータを取り出したものです。利用者が目に見える形である「ビュー」などに相当します。ビューをいじってもデータ格納構造(概念スキーマ)が変わりことはありません。
概念スキーマ
データベース上の論理データです。データベースに保持するデータの要素およびデータ同士の関係を定義します。「テーブル定義書」などに相当します。
内部スキーマ
概念スキーマで定義された論理データを具体的にどのようにDBMS内部に格納するかを定義します。「ハードウェア的」な変更はこのスキーマで影響を吸収します。
スキーマを3つの階層に分ける理由として、あるひとつのスキーマを変更した場合に他の2つのスキーマへは干渉(影響)しないようにするために分けているようですね。
システムにおける性能を上げるためにデータベースをチューニングすることはよくあります。テーブル定義を変えることになった場合でも、スキーマが干渉し合わないため、ビューやハードウェア側を考慮しないで済むので、データベースの運用・保守をするにあたって非常に効率的ですね。
まとめ
今回はデータベースのスキーマに関してまとめてみました。
「スキーマとは」データベースの設計図(定義書)のイメージと捉えれば良いですね。
それぞれの3層スキーマが他の層に干渉しないようにしていることで、データベースの変更のインパクトを吸収するということが大事なのですね。
以上です!
参考サイト)
PostgreSQLではじめるDB入門