Beziehungsabfragen

Ein häufig verwendeter Vorgang bei der Arbeit mit Geodatabase-Systemtabellen ist die Suche nach allen Elementen, die mit einem bestimmten Element verknüpft sind. Beispiele dafür umfassen das Suchen des Inhalts eines Feature-Datasets, das Ermitteln, welche Feature-Classes an einer Topologie oder einem geometrischen Netzwerk beteiligt sind, und die Suche danach, welche Datasets in einem Replikat enthalten sind. Da alle Elemente und Beziehungen in den gleichen Tabellen gespeichert werden, kann eine einzelne Abfrage für alle diese Fälle verwendet werden (mit Zeichenfolgenliteralen, die bestimmen, welches Element jeweils verwendet wird). Diese Abfrage kann mit folgenden Schritte ausgeführt werden:

Nachfolgend finden Sie eine SQL-Abfrage, die alle diese Schritte enthält. Um das jeweils abgefragte Element zu ändern, ändern Sie die beiden Zeichenfolgenvariablen, die am Anfang deklariert wurden.

--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

Im Falle eines Feature-Datasets gibt dies eine Liste mit einem ähnlichen Ergebnis wie beim Durchsuchen eines Feature-Datasets in ArcCatalog zurück. Diese kann Feature-Classes, Beziehungsklassen und Controller-Datasets wie Topologien, Netzwerk-Datasets und Parcel Fabrics enthalten. Darüber hinaus enthält sie möglicherweise einige Datasets, die nicht in ArcCatalog angezeigt werden, z. B. die von Topologien verwendeten nicht überprüften Area-Feature-Classes.

Obwohl dies gut für Beziehungen wie Dataset in Feature-Dataset und Feature-Class in Topologie funktioniert, ist eine leichte Änderung nötig, wenn Sie versuchen, die Ursprungselemente von Beziehungen auf Grundlage eines bestimmten Zielelements zu suchen. Diese Art von der Beziehungsnavigation kann verwendet werden, um herauszufinden, welche Datasets eine bestimmte Domäne verwenden, zu welchem Replikat ein Replikat-Dataset gehört oder an welchen Controller-Mitgliedschaften eine Feature-Class beteiligt ist. Unten sehen Sie eine angepasste Version der vorherigen Abfrage, die so geändert wurde, dass in Beziehung stehende Elemente nach Zielelement statt nach Ursprungselement gesucht werden:

 --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

Informationen zu den in Oracle verwendeten Systemtabellen und Sichten finden Sie im Abschnitt "XML in Geodatabase-Systemtabellen" in Kurzer Überblick über Geodatabase-Systemtabellen.


3/6/2012