français

FAQ : dans quelle mesure les index uniques des ID globaux gérés par géodatabase ont-ils été modifiés ?

Question

FAQ : dans quelle mesure les index uniques des ID globaux gérés par géodatabase ont-ils été modifiés ?

Réponse

Les versions logicielles des produits ArcGIS Desktop 10.5.1 et ArcGIS Pro 2.0 d’Esri incluent des changements de comportement fondamentaux concernant les ID globaux gérés par géodatabase.

Qu’est-ce qu’un ID global géré par géodatabase ?
Un champ d’ID global géré par géodatabase est une colonne UUID non modifiable renseignée par la géodatabase. Il est possible d’ajouter un champ d’ID global via l’outil de géotraitement Add Global IDs (Ajouter les ID globaux) ou à l’aide de Python en utilisant le module arcpy suivant :

AddGlobalIDs_management (in_datasets)
Ce qui a changé
ArcGIS Desktop 10.5.1 et ArcGIS Pro 2.0 proposent désormais le comportement suivant :
  • L’outil Add Global IDs (Ajouter les ID globaux) crée maintenant un index unique sur le champ d’ID global afin de conserver l’unicité des entités dans la classe d’entités ou la table sous-jacente.
Comportement d’une classe versionnée
  • Lors de l’enregistrement en tant que versionné, ArcGIS détecte la colonne d’ID global et crée un index unique sur la table de base sur la colonne d’ID global. Aucun nouvel index n’est créé sur les tables des ajouts et des suppressions.
  • Le fait d’ajouter un ID global sur une classe inscrite comme versionnée crée un nouvel index unique sur le champ d’ID global. Aucun nouvel index n’est créé sur les tables des ajouts et des suppressions.
Comportement d’une classe d’archive non versionnée
  • Lorsque l’archivage est activé, la colonne d’ID global est détectée, ce qui entraîne la création d’un index unique sur les colonnes d’ID global et GDB_TO_DATE.
  • Le fait d’ajouter un ID global à une classe dont l’archivage est activé crée un index unique sur les champs d’ID global et GDB_TO_DATE . La table H obtient un index non unique sur la colonne d’ID global.
Le comportement est résumé dans le tableau ci-dessous :
Type de classePré-conditionOpérationType d’indexNoms d’indexColonnes
Non versionnée Ajouter les ID globauxUNIQUEUUID_GLOBALID
Non versionnéeAvec ID globalActiver l’archivage non versionnéUNIQUEUUID_GLOBALID, GBD_TO_DATE
Non versionnéeArchivage activéAjouter les ID globauxUNIQUEUUID_GLOBALID, GBD_TO_DATE
Non versionnéeAvec ID globalInscrire comme versionnéUNIQUEUUID_**GLOBALID
Non versionnéeAvec UUIDInscrire comme versionnéNONEWINDEX
Non versionnéeAvec ID global et index nommé de manière irrégulière sur l’ID globalInscrire comme versionnéUNIQUEIRREGNAMEDINDEX**GLOBALID
Versionnée(e) Ajouter les ID globauxUNIQUEUUID_**GLOBALID
Versionnée(e)Avec ID globalActiver l’archivageUNIQUEUUID_***GLOBALID
Versionnée(e)Archivage activéAjouter les ID globauxUNIQUEUUID_**GLOBALID
Non versionnéeAvec ID global et contrainte unique de bdInscrire comme versionnéUNIQUEUUID_**GLOBALID
** Aucun nouvel index n’est créé sur les tables des ajouts et des suppressions
*** La table H est créée et obtient l’index NONUNIQUE sur la colonne GLOBALID

image of preceding table

Pourquoi ce changement ?
La création d’un index unique sur les colonnes d’ID global est une réponse directe aux cas de corruption des données. Ce changement permet en effet de s’assurer que les ID globaux dupliqués n’alimentent pas la table de base lorsque des opérations sont effectuées sur des classes versionnées et non versionnées pour lesquelles l’archivage est activé. Les opérations telles que la synchronisation et la réplication dépendent de l’unicité des ID globaux. L’application d’ID globaux uniques au niveau de la base de données constitue une mesure de prévention forte face aux problèmes potentiels de duplication.

Le coût de l’intégrité des données est le temps passé consacré à la création d’index (Ajouter les ID globaux / Inscrire comme versionné / Activer l’archivage). La plateforme de SGBD sous-jacente doit désormais créer une nouvelle structure plus importante. De plus, certaines plateformes de SGBD exigent la reconstruction des index restants sur la table.