リレーションシップの検索
ジオデータベース システム テーブルを操作するときの一般的な目的は、特定アイテムに関連するすべてのアイテムを検索することです。この例としては、フィーチャ データセットのコンテンツの検索、トポロジまたはジオメトリック ネットワークに参加するフィーチャクラスの検索、レプリカに含まれるデータセットの検索などが挙げられます。すべてのアイテムとリレーションシップは同じテーブル内に格納されているため、これらすべての場合に対して 1 つのクエリ(と使用されている特定アイテムを判別する文字列リテラル)を使用できます。この検索は、次の手順で実行できます。
- 元のアイテムの(フィーチャ データセットなど)の UUID を検索します。
- UUID を元の UUID として使用して、すべてのリレーションシップを検索します。
- それぞれの関連先 UUID について、対応するアイテムを検索し、GDB_ItemTypes テーブルを使用してそのタイプを解決します。
以下は、これらすべての手順を組み込んだ SQL クエリです。検索される特定アイテムを変更するには、最初に宣言されている両方の文字列変数を変更します。
--Queries a dbo-schema geodatabase in SQL Server DECLARE @ORIGIN narchar(max); DECLARE @ORIGIN_TYPE narchar(max); SET @ORIGIN = 'Montgomery.Sasha.Landbase'; SET @ORIGIN_TYPE = 'Feature Dataset'; SELECT DEST_ITEMS.Name AS "Name" DEST_TYPES.Name AS "Type" FROM -- Get the unique ID of the origin item. ((((SELECT UUID, Type FROM dbo.GDB_ITEMS WHERE Name = @ORIGIN) AS src_items INNER JOIN (SELECT UUID FROM dbo.GDB_ITEMTYPES WHERE Name = @ORIGIN_TYPE) AS src_types ON src_items.Type = src_types.UUID) --Get the UUIDs of related items. INNER JOIN dbo.GDB_ITEMRELATIONSHIPS AS relationships ON src_items.UUID = relationships.OriginID) -- Resolve the names of the destination items. INNER JOIN dbo.GDB_ITEMS AS dest_items ON relationships.DestID = dest_items.UUID) -- Get the types as human-readable strings. INNER JOIN dbo.GDB_ITEMTYPES AS dest_types ON dest_items.Type = dest_types.UUID
フィーチャ データセットの場合、これは ArcCatalog 内のフィーチャ データセットを参照する場合と似たリストを返します。リストには、フィーチャクラス、リレーションシップ クラス、およびトポロジ、ネットワーク データセット、パーセル ファブリックなどのコントローラ データセットが含まれます。また、このリストには、トポロジが使用するダーティ エリア フィーチャクラスなど、ArcCatalog に表示されないデータセットが含まれる場合もあります。
これは、フィーチャ データセット内のデータセットや、トポロジ内のフィーチャクラスなどのリレーションシップに対してうまく機能しますが、特定の関連先アイテムに基づきリレーションシップの元のアイテムを検索しようとする場合は、少し変更する必要があります。この種のリレーションシップ操作を使用して、特定のドメインを使用するデータセットや、レプリカ データセットが属するレプリカ、あるいはフィーチャクラスが参加するコントローラ メンバーシップを検索することができます以下は、前のクエリの修正バージョンです。元のアイテムではなく関連先アイテムを使用して、関連アイテムを検索できるように変更されています。
--Queries a dbo-schema geodatabase in SQL Server DECLARE @DEST narchar(max); DECLARE @DEST_TYPE narchar(max); SET @DEST = 'Angle'; SET @DEST_TYPE = 'Range Domain'; SELECT SRC_ITEMS.Name AS "Name", SRC_TYPES.Name AS "Type" FROM -- Get the unique ID of the destination item. ((((SELECT UUID, Type FROM dbo.GDB_ITEMS WHERE Name = @DEST) AS dest_items INNER JOIN (SELECT UUID FROM dbo.GDB_ITEMTYPES WHERE Name = @DEST_TYPE) AS dest_types ON dest_items.Type = dest_types.UUID) -- Get the UUIDs of related items. INNER JOIN dbo.GDB_ITEMRELATIONSHIPS AS relationships ON dest_items.UUID = relationships.DestID) -- Resolve the names of the origin items. INNER JOIN dbo.GDB_ITEMS AS src_items ON relationships.OriginID = src_items.UUID) -- Get the types as human-readable strings. INNER JOIN dbo.GDB_ITEMTYPES AS src_types ON src_items.Type = src_types.UUID
Oracle で使用されるシステム テーブルとビューについては、「ジオデータベース システム テーブルの概要」のセクション「ジオデータベース システム テーブルの XML」をご参照ください。