Todas las definiciones de elementos se guardan en la columna de definición de la tabla GDB_Items. Para identificar los elementos que son clases de relación, debe restringir la búsqueda e incluir solo los elementos que son de tipo clase de relación. La información que identifica un elemento como clase de relación está guardada en la columna de nombre de la tabla GDB_ItemTypes. Puede unir las dos tablas usando la columna tipo de la tabla GDB_Items (o la vista GDB_Items_vw en Oracle) y la columna UUID de la tabla GDB_ItemTypes, y a continuación consultar las clases de relación en la tabla GDB_ItemTypes.
Los siguientes ejemplos consultan el nombre de la clase de relación y, si corresponde, el dataset de entidades en el que está y los nombres de las dos tablas o clases de entidad que forman parte de la clase de relación. Es posible que al consultar la geodatabase, también se devuelvan anotaciones vinculadas a entidades. Esto se debe a que la anotación vinculada a entidad es un tipo de clase de relación.
--Queries a geodatabase in PostgreSQL
--Returns a list of relationship classes and their member tables
SELECT
(xpath('//CatalogPath/text()', definition))::text AS "Relationship class and dataset",
(xpath('//OriginClassNames/text()', definition))::text AS "Origin class",
(xpath('//DestinationClassNames/text()', definition))::text AS "Destination class"
FROM
sde.gdb_items items INNER JOIN sde.gdb_itemtypes itemtypes
ON items.type = itemtypes.uuid
WHERE
itemtypes.name = 'Relationship class';
--Queries a dbo-schema geodatabase in SQL Server
--Returns a list of relationship classes and their member tables
SELECT
ITEMS.Definition.value('(/DERelationshipClassInfo/CatalogPath)[1]', 'nvarchar(max)') AS "Relationship Class and dataset",
ITEMS.Definition.value('(/DERelationshipClassInfo/OriginClassNames/Name)[1]', 'nvarchar(max)') AS "Origin Class",
ITEMS.Definition.value('(/DERelationshipClassInfo/DestinationClassNames/Name)[1]', 'nvarchar(max)') AS "Destination Class"
FROM
dbo.GDB_ITEMS AS ITEMS INNER JOIN dbo.GDB_ITEMTYPES AS ITEMTYPES
ON ITEMS.Type = ITEMTYPES.UUID
WHERE
ITEMTYPES.Name = 'Relationship Class';
--Queries a geodatabase in Oracle
--Returns a list of relationship classes and their member tables
SELECT
EXTRACTVALUE(XMLType(Definition), '/DERelationshipClassInfo/CatalogPath') AS "Relationship Class and dataset",
EXTRACTVALUE(XMLType(Definition), '/DERelationshipClassInfo/OriginClassNames/Name') AS "Origin Class",
EXTRACTVALUE(XMLType(Definition), '/DERelationshipClassInfo/DestinationClassNames/Name') AS "Destination Class"
FROM
sde.GDB_ITEMS_VW ITEMS INNER JOIN sde.GDB_ITEMTYPES ITEMTYPES
ON ITEMS.Type = ITEMTYPES.UUID
WHERE
ITEMTYPES.Name = 'Relationship Class';
Mit diesen Abfragen wird eine Liste der Beziehungsklassen mit den Quell- und Zielklassen zurückgegeben.
Relationship class and dataset Origin class Destination class ----------------------------------------- -------------------- ------------------------- mygdb.myuser.speciesrel mygdb.myuser.habitat mygdb.myuser.sptable mygdb.uruser.water\\mygdb.uruser.mainanno mygdb.uruser.mains mygdb.uruser.mdiam mygdb.hisuser.roads\\rowgrantrel mygdb.hisuser.row mygdb.hisuser.rowgrantors
Laut den Ergebnissen enthält die Geodatabase die folgenden Elemente:
- Eine eigenständige Beziehungsklasse mit dem Namen "speciesrel", die sich aus der Feature-Class "Habitat" und der Tabelle "sptable" zusammensetzt.
- Eine Feature-bezogene Annotation-Klasse im Feature-Dataset "water", die sich aus den Feature-Classes "mains" und "mdiam" zusammensetzt.
- Die Beziehungsklasse "rowgrantrel", die im Feature-Dataset "roads" enthalten ist und deren Bestandteile die Tabellen "row" und "rowgrantors" sind.