エンタープライズ ジオデータベースは、データベース管理システムに格納されているシステム テーブル、プロシージャ、関数で構成されています。名前の先頭が GDB_ のシステム テーブルは、データセットの定義、ルール、およびリレーションシップを指定するジオデータベース スキーマについて説明するものです。これらのシステム テーブルは、ジオデータベースのプロパティ、データ整合チェック ルール、および振舞いを実装するために必要なメタデータを保持し管理します。テーブルには、以下のようなものがあります。
- GDB_Items: フィーチャクラス、トポロジ、ドメインなど、ジオデータベースに格納されているすべてのアイテムのリストを保持します。
- GDB_ItemTypes: Table など、認識されるアイテム タイプの定義済みリストを保持します。
- GDB_ItemRelationships: フィーチャ データセット内にどのフィーチャクラスが含まれているかなど、アイテム間のスキーマ関連を保持します。
- GDB_ItemRelationshipTypes: 認識されるリレーションシップ タイプの定義済みリスト (DatasetInFeatureDataset など) を保持します。
GDB_Items テーブルと GDB_ItemRelationships テーブルは、特定のジオデータベース内のユーザー定義スキーマを表します。ジオデータベースのスキーマが変更されると、テーブルの内容も変更されます。GDB_ItemTypes テーブルと GDB_ItemRelationshipTypes テーブルは静的です。以下の図は、これらの 4 つのテーブルの関係を示しています。
GDB_Items テーブル
ジオデータベースは地理座標系アイテムと非地理座標系アイテムを格納します。アイテムの種類としては、表形式データセット (フィーチャクラス、テーブルなど)、データセット コンテナー (フィーチャ データセット、トポロジ、ジオメトリック ネットワークなど)、より高度なジオデータベースの振舞いを制御するデータセット、およびその他のアイテム (ドメイン、ツールボックス、ワークスペース エクステンションなど) があります。これらのアイテムはすべてジオデータベース内部の GDB_Items テーブルに格納されます。各アイテムはそれぞれ 1 行に格納されます。
アイテムは以下の属性を持ちます。
- UUID: アイテムの一意な ID
- Name: アイテムの名前
注意点として、アイテムの名前が一意であることは保証されません。たとえば、リレーションシップ クラスとフィーチャクラスの名前が同じでもかまいません。ただし、アイテムに同じ名前を付けることはお勧めできません。アイテム名は、そのアイテムの内容を区別できるわかりやすい名前にすべきです。
- Type: レコード内のアイテムのタイプを表す UUID。これは一意な ID に相当します。
- Definition: アイテムのプロパティを定義する XML ドキュメント。プロパティと XML スキーマはアイテム タイプごとに異なります。たとえば、オブジェクト クラスの定義にはサブタイプなどの情報が含まれ、コード値ドメインの定義にはコードと値のペアが含まれます。リレーションシップ クラスの定義にはリレーションシップ ルールなどが含まれます。
- Documentation: アイテムのメタデータを格納した XML ドキュメント
- Properties: ビットマスクを使用してアイテムのいくつかのブール型プロパティを取得できる整数値。現在、これはアイテムが ArcGIS 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 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 のジオデータベースの場合、XML 列ではデータベース管理システムのネイティブ XML が使用されているため SQL で XPath 式を使用してクエリを実行できます。
Oracle と Informix のジオデータベースの場合、XML 列では ArcSDE XML が使用され、一連の別テーブルに BLOB として情報が格納されます。そのため、SQL で XML 列に直接アクセスすることはできません。
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 の構成」をご参照ください。
GDB_ tables の関連付け
ジオデータベース機能を追跡するシステム テーブル間の連携具合を確認するには、SQL を使用して調べるのが最善の方法です。GDB_Items テーブルからすべての行と列を選択すると、次のような結果セットが (他の多くのフィールドと共に) 返されます。
[Type] 列の値は UUID として格納されていることに注意してください。以下のクエリで示すように、これらの UUID は、GDB_ItemTypes テーブルを使用して解決できます。
SELECT gdb_items.UUID, gdb_itemtypes.name AS "Type", gdb_items.name
FROM gdb_items INNER JOIN gdb_itemtypes
ON gdb_items.type = gdb_itemtypes.UUID;
これは、GDB_Items テーブルに単純な SELECT ステートメントを実行したときと似た結果を返しますが、[Type] 列の UUID は判読可能な文字列で置き換えられます。
同様に、GDB_ItemRelationships テーブルにも、他のテーブルのキー値である UUID が含まれています。各リレーションシップには、上の GDB_Items テーブルにある UUID 値が 2 つあります。1 つはリレーションシップの関連先アイテムの UUID で、もう 1 つは元のアイテムの UUID です。これらを判読可能な文字列へと解決するには、以下に示すように、GDB_ItemRelationships テーブルを GDB_Items テーブルに 2 回結合する必要があります。
--SQL Server and PostgreSQL query SELECT relationships.type, origin_items.name AS "Origin Name", dest_items.name AS "Dest Name"
FROM gdb_items AS origin_items, gdb_itemrelationships AS relationships, gdb_items AS dest_items WHERE origin_items.UUID = relationships.originid AND dest_items.UUID = relationships.destid;
--Oracle query SELECT relationships.type, origin_items.name AS "Origin Name", dest_items.name AS "Dest Name"
FROM sde.gdb_items origin_items, sde.gdb_itemrelationships relationships, sde.gdb_items dest_items WHERE origin_items.UUID = relationships.originid AND
dest_items.UUID = relationships.destid;
下の図は、上記のクエリで返される結果セットの例を示しています。
前のクエリによりジオデータベース内のアイテム間のリレーションシップが示されますが、リレーションシップ タイプも必要です。以下に示すように、前述のクエリを拡張して、GDB_ItemRelationshipTypes テーブルとの結合を加えることで、[Type] の UUID を解決できます。
--SQL Server and PostgreSQL query SELECT reltypes.name AS type, origin_items.name AS "Origin Name", dest_items.name AS "Dest Name"
FROM gdb_items AS origin_items, gdb_itemrelationships AS relationships, gdb_items AS dest_items, gdb_itemrelationshiptypes AS reltypes WHERE origin_items.UUID = relationships.originid AND dest_items.UUID = relationships.destid AND relationships.type = reltypes.UUID;
--Oracle query SELECT reltypes.name AS type, origin_items.name AS "Origin Name", dest_items.name AS "Dest Name"
FROM sde.gdb_items origin_items, sde.gdb_itemrelationships relationships, sde.gdb_items dest_items, sde.gdb_itemrelationshiptypes reltypes WHERE origin_items.UUID = relationships.originid AND dest_items.UUID = relationships.destid AND
relationships.type = reltypes.UUID;
このクエリは、次の結果を返します。
一般的な GDB_ テーブルのクエリ
GDB_ テーブルで実行される一般的なタイプの SQL クエリに関する情報については、以下のトピックをご参照ください。