エンタープライズ ジオデータベースは、データベース管理システムに格納されたシステム テーブル、プロシージャ、および関数で構成されています。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 行に格納されます。
アイテムにおいて、SQL でアクセスする可能性が最も高い 7 つの属性を以下に示します。
- UUID: アイテムの一意な ID
- Name: アイテムの名前。
注意点として、アイテムの名前が一意であることは保証されません。たとえば、リレーションシップ クラスとフィーチャクラスの名前が同じでもかまいません。ただし、アイテムに同じ名前を付けることはお勧めできません。アイテム名は、そのアイテムの内容を区別できるわかりやすい名前にすべきです。
- Type: レコード内のアイテムのタイプを表す UUID (一意の ID に相当する)
- Definition: アイテムのプロパティを定義する XML ドキュメント。プロパティと XML スキーマはアイテム タイプごとに異なります。たとえば、オブジェクト クラスの定義にはサブタイプなどの情報が含まれ、コード値ドメインの定義にはコードと値のペアが含まれます。リレーションシップ クラスの定義にはリレーションシップ ルールなどが含まれます。
- Documentation: アイテムのメタデータを格納している XML ドキュメント
- プロパティ: ビットマスクと併用してアイテムの複数のブール型プロパティを取得するための整数値。現在、これはアイテムが ArcGIS Desktop で表示可能かどうかを示すためだけに使用されています。
- Shape: 該当する場合、ポリゴンとしてのデータセットの範囲 (データ タイプは基本となるデータベース管理システムによって異なる)
次のリストに示す属性にはアイテムの定義の情報 (フィーチャクラスのジオメトリ タイプなど) が格納されます。これらの属性は、ジオデータベースを効率的に参照できるように、XML の定義とは別に複製されます。その例には、Dataset Subtype プロパティや Dataset Info プロパティがあり、 そのコードはアイテム タイプによって異なります。次に、これらの属性について説明します。
- Physical Name: アイテムの完全修飾名
- DatasetSubtype1: フィーチャクラスとラスター カタログの場合は、DatasetSubtype1 にテーブルのフィーチャ タイプが格納されます。トポロジの場合、トポロジ ID が格納されます。
- DatasetSubtype2: フィーチャクラスとラスター カタログの場合は、DatasetSubtype2 にジオメトリ タイプが格納されます。リレーションシップ クラスの場合、リレーションシップが属性付きか属性なしかを示す値が格納されます。
- DatasetInfo1: フィーチャクラス アイテムの Shape フィールドの名前が格納されます。
- DatasetInfo2: トポロジに属しているフィーチャクラスの情報を格納
- Path: アイテムに対する一意な相対パス
- URL: アイテムに関連付けられた URL (カタログ サービスで使用)
- Defaults: アイテムのメタデータ。ジオデータベースで直接使用されませんが、他のクライアントで使用されます。
- 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: 一意識別子
- プロパティ: ビットマスクと併用してアイテムの複数のブール型プロパティを取得するための整数値。現在、これはリレーションシップに関与するアイテムが 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 サーバーを設定する必要があります。詳細については、「Oracle の ST_Geometry にアクセスするための extproc の構成」をご参照ください。
GDB_ テーブル間の関連
ジオデータベース機能を追跡するシステム テーブルがどのように連携しているかを確認する最も良い方法は、SQL を使用してシステム テーブルを調べることです。GDB_Items テーブルからすべての行と列を選択し、その内容を確認します。
[タイプ] 列の値は UUID として保存されます。UUID は、GDB_ItemTypes テーブルの [UUID] 列に関連しています。したがって、以下のような SQL クエリを使用して、各アイテムのアイテム タイプを返すことができます。
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;
これによって、以下のテーブルに示すように、各アイテムに対してタイプ値が返されます。
UUID | 種類 | 名前順 |
---|---|---|
DF7A67CF-D8B2-461C-A4BF-74AF52AF2BD3 | フォルダー | |
5E53E5C2-874E-4538-A6AB-1F0BBCABA885 | ワークスペース | ワークスペース |
2AC65400-919D-4241-A1A5-83C219A8ACD0 | Coded Value Domain | 製品 |
897D8FA2-BE31-4A5D-94A5-B93A32BF2146 | Coded Value Domain | DitDiam |
B75E3FDF-F864-4FA1-A31A-A56716BBDEA7 | Range Domain | RotAngle |
同様に、GDB_ItemRelationships テーブルにも、他のテーブルのキー値である UUID が含まれています。各リレーションシップには、上の GDB_Items テーブルにある UUID 値が 2 つあります。1 つはリレーションシップの関連先アイテムの UUID で、もう 1 つは元のアイテムの UUID です。これらを判読可能な文字列へと解決するには、GDB_ItemRelationships テーブルを GDB_Items テーブルに 2 回結合する必要があります。リレーションシップ タイプを表示するには、以下の SQL の例に示すように、GDB_ItemRelationshipTypes テーブルに結合を含めます。
--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;
以下に、前述のクエリが返す値の例を示します。
種類 | 関連元の名前 | 関連先の名前 |
---|---|---|
DatasetInFeatureDataset | County.PW.Cadastre | County.PW.PrivRdName |
DatasetInFeatureDataset | County.PW.Cadastre | County.PW.TaxParcelNo |
DomainInDataset | County.PW.PIN | PINB |
FeatureClassInTopology | County.PW.Cadastre_Topology | County.PW.TaxBlocks |
DatasetsRelatedThrough | County.PW.PIN_Condo | County.PW.PIN_Condo2Parcel |
共通 GDB_ テーブルのクエリ
GDB_ テーブルに対して実行される SQL クエリの一般的なタイプの詳細については、以下のトピックをご参照ください。