Requêtes de relations
Un des objectifs communs à l'utilisation des tables système de la géodatabase est de trouver tous les éléments associés à un élément en particulier. Vous pouvez par exemple trouver le contenu d'un jeu de données d'entité, trouver les classes d'entités qui font partie d'une topologie ou d'un réseau géométrique et trouver quels jeux de données sont inclus dans un réplica. Comme tous les éléments et relations sont stockés dans les mêmes tables, vous pouvez utiliser une seule requête pour tous ces cas (avec un littéral de chaîne qui détermine l'élément précis à utiliser). Pour effectuer cette requête, procédez comme suit :
- Recherchez l'UUID de l'élément d'origine (un jeu de données d'entité par exemple).
- Recherchez toutes les relations avec l'UUID comme UUID d'origine.
- Pour chaque UUID de destination, trouvez l'élément correspondant et résolvez son type à l'aide de la table GDB_ItemTypes.
Vous trouverez ci-dessous une requête SQL intégrant toutes ces étapes. Pour modifier l'élément spécifique sur lequel porte la requête, changez les deux variables de chaîne déclarées au début.
--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
Dans le cas d'un jeu de données d'entité, ceci renvoie une liste qui ressemble à ce que vous voyez lorsque vous parcourez un jeu de données d'entité dans ArcCatalog. Elle peut contenir des classes d'entités, des classes de relations, ainsi que des jeux de données de contrôleur, tels que des topologies, des jeux de données réseau et des ateliers parcellaires. Elle peut également comporter des jeux de données qui n'apparaissent pas dans ArcCatalog, tels que les classes d'entités des zones à valider utilisées par les topologies.
Même si cela fonctionne bien pour les relations (un jeu de données dans un jeu de données d'entité et classe d'entités dans une topologie), une légère modification est nécessaire si vous essayez de trouver les éléments d'origine des relations en fonction d'un élément de destination précis. Ce type de navigation dans les relations peut être utile pour déterminer quels jeux de données utilisent un domaine spécifique, pour savoir à quel réplica un jeu de données de réplica appartient ou pour connaître les appartenances à un contrôleur auxquelles une classe d'entités participe. Vous trouverez ci-dessous une version modifiée de la requête précédente, modifiée afin que les éléments associés puissent être trouvés par élément de destination et non par élément d'origine :
--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
Pour plus d'informations sur les tables système et les affichages utilisés dans Oracle, reportez-vous à la section « XML dans les tables système de la géodatabase » du document Présentation rapide des tables système de géodatabase.