75.2 CIMスキーマ

メタスキーマのエレメントは、クラス、プロパティ、およびメソッドです。メタスキーマは、クラスのタイプとして指示と関連付けをサポートし、プロパテイのタイプとして参照をサポートします。

クラスは、クラス間のサブタイプの関係を表す汎化階層に配列できます。汎化階層は、ルート有向グラフであり、多重継承はサポートしていません。

通常のクラスには、ブール、整数、文字列などの組み込みタイプのスカラまたは配列のプロパティを含めることができます。組み込みクラスや他のクラスへの参照を含めることはできません。

関連付けとは、複数の参照が含まれる特別なクラスです。複数のオブジェクトの関係を示します。関連付けを定義する方法によって、関連するクラスに影響を与えることなくクラス間の関係を確立できます。つまり、関連付けを追加しても、関連するクラスのインタフェースには影響を及ぼしません。関連付けのみが参照を持つことができます。

次の図のスキーマのフラグメントは、ZENworks 7 Desktop Managementが使用するCIMオブジェクト間の関係を示しています。

RDBMSスキーマにマッピングするCIMスキーマ

この図は、CIMスキーマがリレーショナルDBMSスキーマにマッピングする方法を示しています。クラスはクラス名と共にボックスの見出しに示されています。関連付けは、2つのクラスを結ぶ線の間に示されています。

このスキーマのフラグメントの継承階層は、次のCIM 2.2スキーマの図に示されています。参照はRefタイプとして太字で示され、参照のタイプを限定する各関連付けのサブタイプも示されています。

CIM 2.2スキーマとその継承階層

75.2.1 CIM対リレーショナルマッピング

CIMは、クラス、継承、ポリモフィズムを備えたオブジェクトモデルです。生成されたリレーショナルスキーマへのマッピングは、こうした特徴を最大限に保持します。リレーショナルマッピングの一部として、次の2つの側面があります。

  • 論理スキーマ: 論理スキーマは、APIと同じように、アプリケーションに対してデータを表示する方法を定義します。その目的は、基になるデータベースに関係なく論理スキーマを同じにして、サポートされているデータベースでアプリケーションソフトウェアを変更しないで実行できるようにすることです。SQLは標準ですが、この目的を十分に達成することはできません。アプリケーションソフトウェアは、使用するデータベースについて詳細に認識する必要があり、この情報は、アプリケーションコードの小さな領域に抽出して分離しておくことができます。

  • 物理スキーマ: 物理スキーマは、データベースでデータを構築する方法を定義します。このスキーマは、SQLとRDBMSの特性によって、データベース固有のものになる傾向があります。このガイドでは、一般的な意味での物理スキーマについてのみ説明します。

データベースのテーブルは、CIM階層の各クラスを表します。テーブル内の対応するタイプの列は、そのクラスの非継承プロパティを示します。各テーブルには、プライマリーキーid$があります。このキーはインスタンスを一意に識別する64ビットの整数です。CIMクラスのインスタンスは、継承階層のクラスに対応するテーブルの行に示されます。各行には、id$と同じ値が含まれています。

各CIMクラスは、id$を使用して継承階層内のテーブルの行を結合し、そのクラスのインスタンスに対して複合プロパティ(継承とローカル)を生成するビューによっても示されます。ビューには、インスタンスの実際の(終端の)クラスのタイプを表す整数タイプの列class$も含まれています。

関連付けは、通常のクラスと同じ方法でマッピングされ、参照プロパティは、参照するオブジェクトインスタンスのid$フィールドがある列で示されます。このため、関連付けの参照フィールドと参照するテーブルのid$フィールドを結合して、関連付けを確認できます。

次の図は、このマッピングを使用する一般的な照会を示しています。

ネットワーク上の全コンピュータを検索する照会

この照会は、特定のネットワークセグメントに接続されている全コンピュータを検索します。関連するクラスと関係は、太枠で強調して示されています。

次のトピックでは、両方のスキーマタイプについて説明します。

75.2.2 論理スキーマ

論理スキーマは、データベースおよびアプリケーションプログラムのユーザが見ることができるデータベーススキーマです。このスキーマは、ストアドプロシージャとビューで構成されています。基になるテーブルは、アプリケーションから見えません。

ZENworks 7 Desktop Managementのインベントリコンポーネントは、JDBCを使用してRDBMSにSQL文を発行し、RDBMSデータタイプとJavaデータタイプを変換します。JDBCにストアドプロシージャとビューを使用すると、基になるデータベーステクノロジから、または物理スキーマの変更からアプリケーションコードを隔離する一定の抽出を実行できます。

論理スキーマのエレメントの詳細については次の節で説明します。

スキーマエレメントの命名

データベーススキーマではCIM名を変更しないで使用することをお勧めします。命名規則には次のような相違点があるため、問題が発生する場合があります。

  • CIMとSQLの名前では、大文字と小文字が区別されません。
  • すべてのデータベースには、それぞれ異なる予約語があります。この予約語は、スキーマエレメント名として使用する場合、引用符(“ “)で囲む必要があります。ただし、Oracleでは、引用符で囲むと大文字と小文字が区別されます。
  • CIMクラスでは、SQLの予約語を名前として使用しないようにします。
  • CIM名の長さには制限はなく、通常は長い名前が付けられています。Sybaseでは128文字まで使用できますが、Oracleでは30文字に制限されています。

これらの問題は、スキーマの生成中に、CIM名の大文字小文字を維持する、30文字より長い名前を短縮する、および予約語を結合した名前を引用符で囲むことで回避できます。

28文字より長い名前は、28文字以下のルート名に短縮されて2文字のプレフィックスを付けることができるため、SQLスキーマエレメントでそのルート名を使用できます。短縮アルゴリズムによって、名前は記憶しやすく認識可能で、その範囲内で固有の名前になるように短縮されます。短縮された名前には、他の名前との競合を避けるためにサフィックスとして#文字が付けられます(CIMでは#は無効な文字であることに注意してください)。同じ範囲内の複数の名前が同じ形に短縮された場合、他の名前と区別するために1桁追加されます。たとえば、AttributeCachingForRegularFilesMinは、AttCacForRegularFilesMin#に短縮されます。

このような短縮された名前はすべて、プログラムが本来のCIM名を検索して短縮名を取得し、SQLで使用できるように、短縮名テーブルに書き込まれます。

ビューは、アプリケーションコードと照会によって最もよく操作されるスキーマエレメントです。ビューが表すCIMクラスと同じ名前を使用します。たとえば、CIM.UnitaryComputerSystemクラスは、CIM.UnitaryComputerSystemという名前のビューで表されます。

必要に応じて、クラス名とプロパティ名を結合して$文字で区切り、インデックスと補助テーブルを作成します。通常、これらの名前は短縮されます。たとえば、NetworkAdapter$NetworkAddressesは、NetAdapter$NetAddresses#に短縮されます。これは、ZENworks 7 Desktop Managementスキーマユーザに悪影響を及ぼすことはありません。

ユーザと役割

SQLでは、スキーマと同じ名前のユーザがスキーマの所有者です。たとえば、CIM、ManageWise®、ZENworksなどです。

また、データベース管理者特権と全スキーマオブジェクトへのアクセス権を持つMW_DBAユーザがいます。MW_Readerの役割には全スキーマオブジェクトへの読み込み専用アクセス権があり、MW_Updaterの役割には全スキーマオブジェクトへの読み込みと書き込み、および実行のアクセス権があります。

アプリケーションプログラムは、要件に応じて、SybaseデータベースにはMW_ReaderまたはMW_Updater、OracleデータベースにはMWO_ReaderまたはMWO_Updater、MS SQL ServerデータベースにはMWM_ReaderまたはMWM_Updaterとしてアクセスする必要があります。

データタイプ

CIMデータタイプは、データベースが備えている最適なデータタイプにマッピングされます。通常、Javaアプリケーションは、JDBCを使用してデータにアクセスするため、タイプを必要としません。

Javaは本来符号なしのタイプをサポートしていないため、符号なしのタイプを表す次のサイズのクラスまたは整数タイプを使用する必要があります。また、データベースの読み書き中に問題が発生しないようにします。たとえば、データベースの符号なしフィールドに負の数を読み書きすると、エラーが発生することがあります。

CIMおよびJavaの文字列はUnicodeであるため、データベースはUTF8文字セットを使用して作成します。国際化対応によって問題が発生することはありませんが、照会における大文字と小文字の区別によって問題が発生することがあります。

すべてのデータベースでは、データベース内に保存されている文字列データの大文字と小文字が保持されますが、照会中は大文字と小文字が区別されるデータまたは区別されないデータのいずれかとしてデータにアクセスします。ZENworks 7 Desktop Managementでは、照会されるデータは照会前にデータベースから取得され、大文字と小文字は自動的に区別されるため、インベントリの照会コンポーネントとデータエクスポートコンポーネントは影響を受けません。

CIMでは、最大文字列サイズで、または最大文字列サイズなしで文字列を指定できます。多くの文字列には指定サイズはありません。つまり、文字列の長さは無制限です。効率性の観点から、この長さが無制限の文字列は、最大サイズが254文字の変数文字列にマッピングされます。最大サイズのCIM文字列は、同じサイズの変数データベース文字列にマッピングされます。データベース内では、Unicode文字の保存には複数バイトが必要なため、サイズは文字ではなくバイトで表します。

ビュー

CIMクラスは、そのクラスのローカルプロパティと継承した非配列プロパティをすべて含むビューによって、データベースに示されます。ビューにはCIMクラスと同じ名前が付けられます。

ビューはSELECT文を使用して照会でき、UPDATE文を使用して更新できます。ビューにはINSERT文およびDELETE文を使用できないため、コンストラクタプロシージャとデストラクタプロシージャを使用します。

75.2.3 物理スキーマ

物理スキーマは、データベースの実装に必要なエレメントで構成されています。物理スキーマはデータベースによって異なります。一般的な物理スキーマは次のもので構成されています。

  • テーブル定義 ’t$xxx’ インデックス定義 ’i$xxx
  • トリガ定義 ’x$xxx’、’n$xxx’、および’u$xxx
  • シーケンス定義(Oracle) ’s$xxx
  • ストアドプロシージャと関数

論理スキーマは、物理スキーマの上に配置し、ユーザやアプリケーションが物理スキーマを認識する必要がないようにします。