Requêtes de relations

Lorsqu'on travaille avec des tables système dans une géodatabase, il est courant de chercher à identifier tous les éléments liés à un élément spécifique. On peut, par exemple, rechercher le contenu d'un jeu de données d'entité, quelles classes d'entités participent à une topologie ou à un réseau géométrique ou quels jeux de données sont inclus dans un réplica. Puisque tous les éléments et relations sont stockés dans les mêmes tables, une requête unique peut être utilisée pour tous ces cas (avec des littéraux de chaîne qui déterminent quel élément spécifique sera utilisé). Les étapes suivantes permettent d'effectuer cette requête :

Voici une requête SQL qui comprend toutes ces étapes. Pour modifier l'élément spécifique qui est interrogé, modifiez les deux variables de chaîne déclarées au début.

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

Dans le cas d'un jeu de données d'entité, elle renvoie une liste semblable à celle d'un jeu de données d'entité dans ArcCatalog ; elle peut contenir des classes d'entités, des classes de relations et des jeux de données de contrôleur, tels que les topologies, les jeux de données réseau et les ateliers parcellaires. Elle peut également contenir certains jeux de données qui n'apparaissent pas dans ArcCatalog, comme les classes d'entités de zone à valider utilisés par les topologies.

Très efficace pour les relations de type jeu de données dans un jeu de données d'entité et classe d'entités dans une topologie, une petite modification est néanmoins nécessaire pour rechercher les éléments d'origine des relations fondées sur un élément de destination spécifique. Ce genre de navigation parmi les relations permet de rechercher les jeux de données qui utilisent un domaine spécifique, le réplica auquel un jeu de données de réplicas appartient ou les appartenances contrôleur auxquelles une classe d'entités est associée. Voici une version modifiée de la requête précédente, afin que les éléments liés soient recherchés par élément de destination plutôt qu'élément d'origine :

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

Pour en savoir plus sur les tables système et les vues utilisées dans Oracle, consultez la section "XML dans les tables système de la géodatabase" de la rubrique Présentation rapide des tables système de la géodatabase.


3/6/2012