皆さんはデータベースの「スキーマ」という言葉を理解していますか?
データベースにおける基礎的な概念である「スキーマ」について、おさらいするとともに
SI Object Browserを用いてスキーマを視覚的に見て理解を深めていきましょう。
スキーマとは
データベースにおけるスキーマとは、「データベースの構造を表現する設計図」となり、三層スキーマアーキテクチャと呼ばれる構造で定義されます。
*データベース設計全体における抽象的な概念であるため、通常のユーザーや管理者が意識することはありません。
■三層スキーマアーキテクチャ
・外部スキーマ
実際にユーザーに見える部分のデータで、ビューに相当する層
・概念スキーマ
データベース管理者によって管理される対象で、論理的なデータを定義する層
・内部スキーマ
データベースのハードウェア部分に相当する、物理的配置を定義する層
図. 三層スキーマアーキテクチャとは
各層の変更は、別の層へ影響しないような設計となっています。
非常に抽象的な表現になりましたが、実際に我々エンジニアが触れるスキーマというものは「概念スキーマ」にあたります。(これが各RDBMS製品利用者になじみのあるスキーマです。)
次節では、この概念スキーマ(以降他の層には触れないため、スキーマと呼ぶ)を詳しく見ていきます。
データベース管理者にとってのスキーマ
スキーマは、代表的なRDBMS製品ごとにやや意味の違いはありますが、基本的には以下の役割を持ちます。
■1つのデータベースを多数のユーザーが互いに干渉することなく使用できるようにするための役割
スキーマはオブジェクトの入れ物としての役割を持つため、ユーザーごとに干渉しないようにスキーマ単位でオブジェクトの格納が行える。
■テーブルや索引などのデータベースオブジェクトを論理グループとして管理する
同一名のオブジェクトは、スキーマをわけることで存在ができる。
簡潔に言うと、「スキーマ」 ≒ 「オブジェクトの論理的な入れ物、カバン」という役割を担います。
Windows OSで例えると、「フォルダ」に近い存在ですが、スキーマの中にサブスキーマを定義することはできないことにご注意ください。
SI Object Browserでスキーマを理解する
次に各RDBMS製品におけるスキーマの概念とともに、SI Object Browser(以下、OB)を用いてスキーマオブジェクトを実際に見てみましょう。
■Oracle Database
Oracle Database (以下、Oracle ) におけるスキーマとは、以下の通りです。
【定義】
・Oracleではユーザーの作成と同時に、同じ名前のスキーマが作成される
⇒ ユーザー≒スキーマとなる
・スキーマは、ユーザーが所有するオブジェクトの入れ物
・オブジェクト権限によって、スキーマオブジェクトへのアクセスを制限できる
(デフォルトではスキーマオブジェクト所有者かシステム権限をもつデータベース管理者のみがアクセスできる)
ではOBで視覚的に見ていきましょう。テスト用のスキーマを見るために、新規ユーザーを作成します。
図. スキーマ(ユーザー)の新規作成
OBでは、各オブジェクトのリストがサイドメニューとして表示されます。
図の“SAMPLE_SCHEMA_USER”がスキーマに該当し、その中に各オブジェクトが格納されます。
図. 新規作成されたスキーマのオブジェクトリスト
GUIからもわかるように、ユーザーとスキーマが1:1で対応しています。
■SQL Server
SQL Serverも同様に見ていきます。
【定義】
・ユーザーとスキーマは分離される
⇒ Oracleとは違いユーザー≠スキーマとなる
・スキーマはオブジェクトの名前付きコンテナとなる
・スキーマの所有者は任意であり、かつ1ユーザーが複数のスキーマを保持することができる
こちらも視覚的に確認しましょう。
Oracleと違い、ユーザーとスキーマは1:1対応ではなく、1:多対応となります。
下図では、現在ログイン中”dbo”ユーザーが同名の”dbo”スキーマを所有しています。
図. “dbo”ユーザー情報
dboスキーマ内には、dboスキーマが所有する各オブジェクトが格納されています。
オブジェクトリストの所有者列、もしくはSQL実行画面にて”dbo”スキーマを指定した際の入力補完機能などによって、スキーマが所有するオブジェクトが確認できます。
図. “dbo”スキーマの所有するオブジェクト一覧(SQL実行画面)
SQL Serverでは、1ユーザーが複数のスキーマを持てると言いました。実際に動作を確認してみましょう。
まず、新規のスキーマを作成します。
図. スキーマの新規作成
確かに、”dbo”ユーザーが複数のスキーマを所有することができました。
図. “dbo”ユーザーが複数のスキーマを所有する
次に新規作成した”sample_schema”内にテーブルオブジェクトを作成してみます。
図. “sample_schema”上に新規のテーブルオブジェクトを作成
“sample_schema”内に作成した“TEST_TABLE”というテーブルオブジェクトが格納されました。
図. “sample_schema”の保有オブジェクトの確認
■PostgreSQL
最後にPostgreSQLでのスキーマはどうでしょうか。同様に定義を確認していきます。
【定義】
・データベースオブジェクトの入れ物である
・ユーザーは権限があればスキーマへのアクセスが可能である
PostgreSQLでも新規スキーマを作成してみていきましょう。
“postgres”ユーザーを所有者とする新規のスキーマを作成します。
図. 新規スキーマの作成
現在の”postgres”ユーザーの接続情報をもとに、作成した“test_schema”に接続をしましょう。
図. “test_schema”を所有するユーザー”postgres”の情報で接続
無事、権限を持つ”postgres”ユーザーにて、“test_schema”への接続が行えました。
図. 新規作成したスキーマのオブジェクトリスト
まとめ
いかがだったでしょうか。スキーマの概念と代表的なRDBMS製品ごとの違いについて
理解はできましたでしょうか。
基礎的な概念ではありますが、きちんとした理解を持つことは重要です。
各OB製品を用いることで、これらの概念を直観的に理解することも可能です。
製品を使いながら、あいまいな概念の理解を深めていきましょう。
- カテゴリ: