Parcourir les tables système d'une géodatabase avec SQL

Lorsque que l'on connaît les relations entre les quatre tables système de la géodatabase, la meilleure façon de comprendre comment elles fonctionnent ensemble consiste à les examiner à l'aide de SQL. La sélection de toutes les lignes et colonnes de la table GDB_Items renvoie un jeu de résultats semblable à celui-ci (en même temps que beaucoup d'autres champs) :

Valeurs renvoyées lors de l'interrogation de la table GDB_Items

Remarquez que les valeurs dans la colonne Type sont stockées en tant qu'UUID. Comme mentionné dans la rubrique Présentation rapide des tables système de géodatabase, ces UUID peuvent être résolus à l'aide de la table GDB_ItemTypes, comme indiqué dans la requête suivante :

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;

La requête renvoie un résultat semblable à celui d'une instruction SELECT simple exécutée sur la table GDB_Items, mais l'UUID de la colonne Type est remplacé par des chaînes intelligibles :

Valeurs textuelles dans la colonne Type

De la même façon, la table GDB_Relationships contient également des UUID qui sont des valeurs clés d'autres tables. Chaque relation contient deux des valeurs UUID présentes dans la table GDB_Items ci-dessus : une pour l'élément de destination de la relation et une autre pour son élément d'origine. Pour les transformer en chaînes intelligibles, vous devez joindre la table GDB_Relationships à la table GDB_Items, deux fois :

--SQL Server and PostgreSQL query
SELECT relationships.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
WHERE
   origin_items.UUID = relationships.originid AND
   dest_items.UUID = relationships.destid;

--Oracle query
SELECT relationships.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
WHERE
   origin_items.UUID = relationships.originid AND
   dest_items.UUID = relationships.destid;

L'illustration suivante constitue un exemple de jeu de résultats qui peut être renvoyé de la requête précédente :

Valeurs textuelles pour les noms d'élément d'origine et de destination

Bien que ces résultats affichent les relations entre des éléments dans la géodatabase, le type de relation est également nécessaire. Vous pouvez résoudre le type UUID en développant la requête précédente, afin d'inclure une jointure avec la table GDB_RelationshipTypes :

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

Celle-ci renvoie les éléments suivants :

Valeurs textuelles dans la colonne Type de la table GDB_RelationshipTypes

9/12/2013