ジオデータベース システム テーブルのクイック ツアー
ジオデータベースの内部構造は、各ジオデータベースの内容を保持するジオデータベース システム テーブル(名前の先頭が GDB_ のテーブル)と呼ばれる一連のテーブルです。システム テーブルは、すべてのデータセットの定義、ルール、およびリレーションシップを定義するジオデータベース スキーマを保持します。システム テーブルは、ジオデータベースのプロパティ、データ整合チェック ルール、および振舞いを実装するために必要なメタデータをすべて保持して管理します。
ArcGIS 10 リリース以降、これらのテーブルの内部構造が再編されました。ジオデータベースのスキーマに関連する情報は、ArcGIS 10 より前のリリースでは 35 を超えるジオデータベース システム テーブルに格納されていましたが、ArcGIS 10 では、4 つのメイン テーブルに集約されています。
- GDB_Items: フィーチャクラス、トポロジ、ドメインなど、ジオデータベースに格納されているすべてのアイテムのリストを保持します。
- GDB_ItemTypes: Table など、認識されるアイテム タイプの定義済みリストを保持します。
- GDB_ItemRelationships: フィーチャ データセット内にどのフィーチャクラスが含まれているかなど、アイテム間のスキーマ関連を保持します。
- GDB_ItemRelationshipTypes: 認識されるリレーションシップ タイプの定義済みリスト(DatasetInFeatureDataset など)を保持します。
GDB_Items テーブルと GDB_ItemRelationships テーブルは、特定のジオデータベース内のユーザ定義スキーマを表します。ジオデータベースのスキーマが変更されると、テーブルの内容も変更されます。GDB_ItemTypes テーブルと GDB_ItemRelationshipTypes テーブルは静的です。以下の図は、これらの 4 つのテーブルの関係を示しています。
XML 定義については、ホワイトペーパー「XML Schema of the Geodatabase」をご参照ください。
GDB_Items テーブル
ジオデータベースはグラフィック アイテムと非グラフィック アイテムを格納します。アイテムの種類としては、表形式データセット(フィーチャクラス、テーブルなど)、データセット コンテナ(フィーチャ データセット、トポロジ、ジオメトリック ネットワークなど)、より高度なジオデータベースの振舞いを制御するデータセット、およびその他のアイテム(ドメイン、ツールボックス、ワークスペース エクステンションなど)があります。ArcGIS 10 以降、これらのアイテムはすべてジオデータベース内部の GDB_Items テーブルに格納されます。各アイテムはそれぞれ 1 行に格納されます。
アイテムは以下の属性を持ちます。
- UUID: アイテムの一意な ID
- Name: アイテムの名前
注意点として、アイテムの名前が一意であることは保証されません。たとえば、リレーションシップ クラスとフィーチャクラスの名前が同じでもかまいません。ただし、アイテムに同じ名前を付けることはお勧めできません。アイテム名は、そのアイテムの内容を区別できるわかりやすい名前にすべきです。
- Type: レコード内のアイテムのタイプを表す UUID。これは一意な ID に相当します。
- Definition: アイテムのプロパティを定義する XML ドキュメント。プロパティと XML スキーマはアイテム タイプごとに異なります。たとえば、オブジェクト クラスの定義にはサブタイプなどの情報が含まれ、コード値ドメインの定義にはコードと値のペアが含まれます。リレーションシップ クラスの定義にはリレーションシップ ルールなどが含まれます。
- Documentation: アイテムのメタデータを格納した XML ドキュメント
- Properties: ビットマスクを使用してアイテムのいくつかのブール型プロパティを取得できる整数値。現在、これはアイテムが ArcGIS for Desktop で表示可能かどうかを示すためだけに使用されています。
- Shape: 該当する場合、ポリゴンとしてのデータセットの範囲(データ タイプは使用している DBMS によって変わります)
これらの 7 つの属性は、SQL でアクセスする可能性が最も高い属性です。
次に示す属性にはアイテムの定義の情報(フィーチャクラスのジオメトリ タイプなど)が格納されます。これらの属性は、ジオデータベースを効率的に参照できるように、XML の定義とは別に複製されます。これらの属性の例には、Dataset Subtype プロパティや Dataset Info プロパティがあり、そのコードはアイテム タイプによって異なります。
- Physical Name: アイテムの完全修飾名
- DatasetSubtype1: フィーチャクラスとラスタ カタログの場合、DatasetSubtype1 にはテーブルのフィーチャ タイプが格納されます。リレーションシップ クラスの場合、リレーションシップ クラスの基数が格納されます。トポロジの場合、トポロジ ID が格納されます。
- DatasetSubtype2: フィーチャクラスとラスタ カタログの場合、DatasetSubtype2 にはジオメトリ タイプが格納されます。リレーションシップ クラスの場合、リレーションシップが属性付きか属性なしかを示す値が格納されます。
- DatasetInfo1: フィーチャクラス アイテムの Shape フィールドの名前が格納されます。
- DatasetInfo2: トポロジに属するフィーチャクラスの情報が格納されます。
- Path: アイテムに対する一意の相対パス
- URL: アイテムに関連付けられた URL。カタログ サービスで使用されます。
- Defaults: アイテムのメタデータ。ジオデータベースによって直接使用されることはありませんが、ArcIMS メタデータ サービスのような他のクライアントによって使用されます。
- ItemInfo: 関連するデータセットからは独立しているアイテムの格納情報(シンボル表示など)
GDB_ItemTypes テーブル
GDB_ItemTypes テーブルは、ジオデータベースで認識されるアイテム タイプの定義済みセットを保持します。アイテム タイプは、GDB_Items テーブルを正規化して(GDB_Items テーブルではアイテムのタイプは UUID として表されます)、将来的なジオデータベースの機能強化を支援し、タイプ階層を定義するために使用されます。親タイプはすべて抽象タイプです。そのため、親アイテムは実際には GDB_Items テーブルに存在しません。
GDB_ItemTypes テーブルの内容は静的です。アイテムが作成または削除されても変更されません。
アイテム タイプは以下の属性を持ちます。
- UUID: アイテム タイプの一意な ID。GDB_Item テーブルの Type 列に対する外部キーです。
- ParentTypeID: アイテム タイプの親タイプ。抽象アイテム タイプの場合(親がない場合)、これは Null UUID です。
- Name: アイテム タイプの名前(Feature Class や Range Domain など)
- ObjectID: GDB_ItemTypes テーブル用の一意な ID
GDB_ItemRelationships テーブル
ほとんどすべてのジオデータベース アイテムは、少なくとも 1 つの他のジオデータベース アイテムとのリレーションシップを持ちます。たとえば、スタンドアロン テーブルはジオデータベースのルート フォルダに関係付けられ、ドメインは整合チェックで依存するフィーチャクラスまたはテーブルに関係付けられ、フィーチャクラスがトポロジに所属する場合はトポロジに関係付けられます。GDB_ItemRelationships テーブルはこのようなリレーションシップを追跡するために使用されます。
アイテム リレーションシップは以下の属性を持ちます。
- UUID: アイテム リレーションシップの一意な ID
- Type: リレーションシップのタイプを表す UUID。これはアイテム リレーションシップのタイプの一意な ID に相当します。
- OriginID: リレーションシップの関連元アイテムの一意な ID
- DestinationID: リレーションシップの関連先アイテムの一意な ID
- Attributes: アイテム リレーションシップの詳細な情報を含む XML ドキュメント
多くのリレーションシップ タイプは Attributes を持ちません。Attributes は一部の制御元のデータセットと制御されるデータセットの間のリレーションシップだけで使用されます。
- ObjectID: 一意な ID
- Properties: ビットマスクを使用してアイテムのいくつかのブール型プロパティを取得できる整数値。現在、これはリレーションシップに関与するアイテムが ArcGIS for Desktop で表示可能かどうかを示すためだけに使用されています。
多くの場合、SQL でアクセスするのは最初の 5 つの属性だけです。
アイテム リレーションシップはリレーションシップ クラスとは異なることを理解することが重要です。どのリレーションシップ クラスも 2 つのオブジェクト クラス(関連元クラスと関連先クラス)とのアイテム リレーションシップ、に加えてそのコンテナ(ジオデータベースのルート フォルダまたはフィーチャ データセット)とのアイテム リレーションシップを持ちます。
GDB_ItemRelationshipTypes テーブル
アイテム タイプの静的コレクションがアイテムの分類に使用されるのと同じように、アイテム リレーションシップ タイプの静的コレクションがアイテム リレーションシップの分類に使用されます。たとえば、DatasetInFeatureDataset(フィーチャクラス、リレーションシップ クラス、または制御元のデータセットがフィーチャ データセット内に存在することを示します)と DomainInDataset(データセットがクラスレベルまたはサブタイプレベルの整合チェックのためにドメインを使用することを示します)はアイテム リレーションシップのタイプです。アイテム タイプとは違って、アイテム リレーションシップ タイプには親タイプと子タイプという階層の概念はありません。
アイテム リレーションシップ タイプは以下の属性を持ちます。
- UUID: アイテム リレーションシップ タイプの一意な ID。アイテム リレーションシップ テーブルの Type 列の主キーです。
- Name: アイテム リレーションシップ タイプの名前(DatasetInFolder など)
- Forward Label: 関連元アイテムの文脈におけるリレーションシップの説明
- Backward Label: 関連先アイテムの文脈におけるリレーションシップの説明
- Origin Item Type ID: このタイプのアイテム リレーションシップで関連元アイテムとして使用できるアイテム タイプの UUID
- Destination Item Type ID: このタイプのアイテム リレーションシップで関連先アイテムとして使用できるアイテム タイプの UUID
- Is Containment: 関連元アイテムが削除された場合でも関連先アイテムが存在できるかどうかを示します。
Origin Item Type ID と Destination Item Type ID は多くの場合、抽象アイテム タイプの ID です。たとえば、DomainInDataset リレーションシップ タイプの Origin Item Type ID は Domain ですが、これは Range Domain と Coded Value Domain という 2 つのサブタイプを持つ抽象アイテム タイプです。
ジオデータベース システム テーブルの XML
ジオデータベース システム テーブルの属性の定義で述べたように、一部のフィールドでは XML データ タイプが使用されます。IBM DB2、Microsoft SQL Server、および PostgreSQL の ArcSDE ジオデータベースの場合、XML 列ではデータベース管理システムのネイティブ XML が使用されているため SQL で XPath 式を使用してクエリできます。
Oracle と Informix のジオデータベースの場合、XML 列では ArcSDE XML が使用され、一連の別テーブルに BLOB として情報が格納されます。そのため、SQL で直接アクセスすることはできません。
Oracle のジオデータベースでシステム テーブルの XML 列の内容を表示できるように、ジオデータベース システム テーブルの XML 列の内容を CLOB データ タイプで格納するシステム ビューが 2 つ用意されています。GDB_Items_vw は、GDB_Items テーブルの Definition、Documentation、ItemInfo の各列の内容を CLOB 列に格納します。GDB_ItemRelationships_vw は、GDB_Relationships テーブルの Attributes 列の内容を CLOB 列に格納します。CLOB 列の内容はテキストとして読み取ることができます。
これらのビューを検索するときは、CLOB 列から文字列を抽出し、XML タイプに変換してから、XPath クエリを実行します。空白の文字列を含む列の XML タイプを作成しようとした場合、Oracle ではサポートされていないため、「XML解析に失敗しました。」
CLOB 列の内容に対してクエリを実行するには、SQL 接続を受け入れるように Oracle サーバを設定する必要があります。詳細については、「SQL を使用するための Oracle リスナーの設定」をご参照ください。