ジオデータベースの内部構造は、各ジオデータベースの内容を保持するジオデータベース システム テーブル (名前の先頭が 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 つのテーブルの関係を示しています。
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 つの属性だけです。
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: 関連元アイテムが削除された場合でも関連先アイテムが存在できるかどうかを示します。
ジオデータベース システム テーブルの 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 extproc の構成」をご参照ください。