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

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

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

スキーマとは

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

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

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

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

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

image1

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

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

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

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

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

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

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

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

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

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

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製品を用いることで、これらの概念を直観的に理解することも可能です。
製品を使いながら、あいまいな概念の理解を深めていきましょう。

CTA

RELATED POST関連記事


RECENT POST「OBをトコトン極める」の最新記事


OBをトコトン極める

Oracle 権限を確認・編集する

OBをトコトン極める

Oracle ディレクトリ・オブジェクトを使ってみよう

OBをトコトン極める

SI Object Browserの基本がマスターできるチュートリアル

OBをトコトン極める

Oracle SQL*Plusとは?基本や利用できるコマンドや使い方について

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