Un objetivo común al trabajar con las tablas del sistema de geodatabase es buscar todos los elementos relacionados con un elemento específico. Algunos ejemplos de esto incluyen buscar el contenido de un dataset de entidades, buscar qué clases de entidad participan en una topología o red geométrica, y buscar qué datasets se incluyen en una réplica. Dado que todos los elementos y las relaciones se almacenan en las mismas tablas, se puede utilizar una sola consulta para todos estos casos (con literales de cadenas de texto que determinan el elemento específico que se utilizará). Los siguientes pasos se pueden utilizar para realizar esta consulta:
- Buscar el UUID del elemento de origen (como un dataset de entidades).
- Buscar todas las relaciones con el UUID como el UUID de origen.
- Para cada UUID de destino, busque el elemento correspondiente y resuelva el tipo con la tabla GDB_ItemTypes.
La siguiente es una consulta SQL que incorpora todos estos pasos. Para cambiar el elemento específico que se está consultando, modifique las dos variables de cadena de texto que se declaran al principio.
--Queries a dbo-schema geodatabase in SQL Server
DECLARE @ORIGIN nvarchar(max);
DECLARE @ORIGIN_TYPE nvarchar(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
En el caso de un dataset de entidades, se obtiene una lista similar a lo que vería al buscar un dataset de entidades en ArcCatalog; podría incluir clases de entidad, clases de relación y datasets controladores como topologías, datasets de red y estructuras de parcelas. Además, puede contener algunos datasets que no aparecen en ArcCatalog, como las clases de entidad del área sin validar que utilizan las topologías.
Si bien esto funciona correctamente para las relaciones del tipo dataset en dataset de entidades y clase de entidad en topología, se requiere una pequeña modificación cuando se intenta buscar los elementos de origen de las relaciones basándose en un elemento de destino específico. Esta clase de navegación de relaciones se puede utilizar para buscar qué datasets utilizan un dominio específico, a qué réplica pertenece un dataset de réplica o en qué pertenencias a controlador participa una clase de entidad. La siguiente es una versión modificada de la consulta anterior, que se cambió para que el elemento de destino, en lugar del elemento de origen, pueda encontrar los elementos relacionados:
--Queries a dbo-schema geodatabase in SQL Server
DECLARE @DEST nvarchar(max);
DECLARE @DEST_TYPE nvarchar(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
Para obtener información sobre las tablas y vistas del sistema que se utilizan en Oracle, consulte Tablas del sistema de geodatabase.