データベースのスキーマを理解する

 2021.02.08  株式会社システムインテグレータ

皆さんはデータベースの「スキーマ」という言葉を理解していますか?
データベースにおける基礎的な概念である「スキーマ」について、おさらいするとともに
SI Object Browserを用いてスキーマを視覚的に見て理解を深めていきましょう。

スキーマとは

データベースにおけるスキーマとは、「データベースの構造を表現する設計図」となり、三層スキーマアーキテクチャと呼ばれる構造で定義されます。

*データベース設計全体における抽象的な概念であるため、通常のユーザーや管理者が意識することはありません。

■三層スキーマアーキテクチャ
・外部スキーマ
 実際にユーザーに見える部分のデータで、ビューに相当する層

・概念スキーマ
 データベース管理者によって管理される対象で、論理的なデータを定義する層

・内部スキーマ
 データベースのハードウェア部分に相当する、物理的配置を定義する層

image1

. 三層スキーマアーキテクチャとは

各層の変更は、別の層へ影響しないような設計となっています。

非常に抽象的な表現になりましたが、実際に我々エンジニアが触れるスキーマというものは「概念スキーマ」にあたります。(これが各RDBMS製品利用者になじみのあるスキーマです。)

次節では、この概念スキーマ(以降他の層には触れないため、スキーマと呼ぶ)を詳しく見ていきます。

データベース管理者にとってのスキーマ

スキーマは、代表的なRDBMS製品ごとにやや意味の違いはありますが、基本的には以下の役割を持ちます。

1つのデータベースを多数のユーザーが互いに干渉することなく使用できるようにするための役割
 スキーマはオブジェクトの入れ物としての役割を持つため、ユーザーごとに干渉しないようにスキーマ単位でオブジェクトの格納が行える。

■テーブルや索引などのデータベースオブジェクトを論理グループとして管理する
 同一名のオブジェクトは、スキーマをわけることで存在ができる。

簡潔に言うと、「スキーマ」 ≒ 「オブジェクトの論理的な入れ物、カバン」という役割を担います。

Windows OSで例えると、「フォルダ」に近い存在ですが、スキーマの中にサブスキーマを定義することはできないことにご注意ください。

新規CTA
新規CTA

SI Object Browserでスキーマを理解する

次に各RDBMS製品におけるスキーマの概念とともに、SI Object Browser(以下、OB)を用いてスキーマオブジェクトを実際に見てみましょう。

Oracle Database

Oracle Database (以下、Oracle ) におけるスキーマとは、以下の通りです。

【定義】
Oracleではユーザーの作成と同時に同じ名前のスキーマが作成される
 ⇒ ユーザー≒スキーマとなる

・スキーマは、ユーザーが所有するオブジェクトの入れ物

・オブジェクト権限によって、スキーマオブジェクトへのアクセスを制限できる
(デフォルトではスキーマオブジェクト所有者かシステム権限をもつデータベース管理者のみがアクセスできる)

ではOBで視覚的に見ていきましょう。テスト用のスキーマを見るために、新規ユーザーを作成します。

image2

. スキーマ(ユーザー)の新規作成

OBでは、各オブジェクトのリストがサイドメニューとして表示されます。

図の“SAMPLE_SCHEMA_USER”がスキーマに該当し、その中に各オブジェクトが格納されます。

image3

. 新規作成されたスキーマのオブジェクトリスト

GUIからもわかるように、ユーザーとスキーマが11で対応しています。

SQL Server
SQL Serverも同様に見ていきます。

【定義】
・ユーザーとスキーマは分離される
 ⇒ Oracleとは違いユーザー≠スキーマとなる

・スキーマはオブジェクトの名前付きコンテナとなる

・スキーマの所有者は任意であり、かつ1ユーザーが複数のスキーマを保持することができる

こちらも視覚的に確認しましょう。
Oracleと違い、ユーザーとスキーマは11対応ではなく、1:多対応となります。
下図では、現在ログイン中”dbo”ユーザーが同名の”dbo”スキーマを所有しています。

image4-2

. “dbo”ユーザー情報

dboスキーマ内には、dboスキーマが所有する各オブジェクトが格納されています。
オブジェクトリストの所有者列、もしくはSQL実行画面にて”dbo”スキーマを指定した際の入力補完機能などによって、スキーマが所有するオブジェクトが確認できます。

image5-1

. “dbo”スキーマの所有するオブジェクト一覧(SQL実行画面)

SQL Serverでは、1ユーザーが複数のスキーマを持てると言いました。実際に動作を確認してみましょう。

まず、新規のスキーマを作成します。

image6

. スキーマの新規作成

確かに、”dbo”ユーザーが複数のスキーマを所有することができました。

image7-1

. “dbo”ユーザーが複数のスキーマを所有する

 次に新規作成した”sample_schema”内にテーブルオブジェクトを作成してみます。

image8-1

. “sample_schema”上に新規のテーブルオブジェクトを作成

“sample_schema”内に作成した“TEST_TABLE”というテーブルオブジェクトが格納されました。

image9-2

. “sample_schema”の保有オブジェクトの確認

PostgreSQL
最後にPostgreSQLでのスキーマはどうでしょうか。同様に定義を確認していきます。
【定義】
・データベースオブジェクトの入れ物である

・ユーザーは権限があればスキーマへのアクセスが可能である

 

PostgreSQLでも新規スキーマを作成してみていきましょう。

postgres”ユーザーを所有者とする新規のスキーマを作成します。

image10

. 新規スキーマの作成

現在の”postgres”ユーザーの接続情報をもとに、作成した“test_schema”に接続をしましょう。

image11

. “test_schema”を所有するユーザー”postgres”の情報で接続

 無事、権限を持つ”postgres”ユーザーにて、“test_schema”への接続が行えました。

image12

. 新規作成したスキーマのオブジェクトリスト

まとめ

いかがだったでしょうか。スキーマの概念と代表的なRDBMS製品ごとの違いについて
理解はできましたでしょうか。
基礎的な概念ではありますが、きちんとした理解を持つことは重要です。
各OB製品を用いることで、これらの概念を直観的に理解することも可能です。
製品を使いながら、あいまいな概念の理解を深めていきましょう。

いまさら聞けない Oracleの基本

RELATED POST関連記事


RECENT POST「【OBトコ】DBの勉強」の最新記事


【OBトコ】DBの勉強

データベース別インスタンスの関係性

【OBトコ】DBの勉強

ビューとマテリアライズド・ビューの違いを理解する

【OBトコ】DBの勉強

Oracle 表領域を拡張してみよう

【OBトコ】DBの勉強

Oracle スケーラブルシーケンスの使い方を確認しよう

データベースのスキーマを理解する
新規CTA

新規CTA
ブログ購読のお申込み

RANKING人気資料ランキング

RANKING人気記事ランキング

RECENT POST 最新記事