Est-il possible de conserver des clés primaires sur des classes de fonctionnalités versionnées sans code d'arcobjects?

11

Comme ce n'est pas une bonne idée d'utiliser les ObjectID comme clés primaires dans les relations, une autre colonne devra être utilisée. Est-il possible d'utiliser des séquences de SGBD pour remplir des colonnes de clé primaire dans des classes de fonctionnalités versionnées, ou devrai-je écrire du code arcobjects pour ce faire?

J'ai entendu dire que les identifiants globaux pouvaient être utilisés , mais les administrateurs de bases de données non SIG ne gèrent souvent pas cette idée.

Kirk Kuykendall
la source
Déplacer ma réponse à un commentaire car ma mémoire est insuffisante et cela n'a peut-être pas fonctionné correctement: il y a quelques années, j'ai essayé d'utiliser un déclencheur d'insertion sur la table des ajouts. Si je me souviens bien, cela a fonctionné. J'ai finalement (et rapidement) opté pour une solution ArcObjects (qui appelait une procédure stockée), car c'était plus facile (pour moi) car je n'avais pas à écrire un nouveau déclencheur lors de l'ajout / versionnage d'une nouvelle classe de fonctionnalités.
Jay Cummins
2
Je pense que c'était un déclencheur AFTER INSERT (oracle) avec une vérification nulle, donc la nouvelle ligne obtiendrait la valeur de clé primaire existante si elle était déplacée. S'il était nul, il se remplirait. Peut-être que je me trompe et que cela ne fonctionnait pas bien et que je ne m'en rendais pas compte. Quelle base de données utilisez-vous?
Jay Cummins
@Jay Merci d'avoir élaboré. Ma principale raison de poser cette question est de déterminer s'il existe d'autres approches à ce problème en plus du code arcobjects que j'ai écrit pour le faire. Je ne veux pas dire à quelqu'un que ma solution est la seule solution possible sans une enquête approfondie. Et si oui, combien il est difficile de le maintenir. Je n'écris qu'occasionnellement des procédures stockées, et la plupart d'entre elles se trouvent sur le serveur SQL. Je soupçonne qu'il existe un moyen de le faire au niveau dbms (au lieu d'arcobjects) mais je ne l'ai jamais examiné de près dans tous les dbms.
Kirk Kuykendall

Réponses:

7

Oui, c'est possible - avec quelques mises en garde.

Vous pouvez le faire avec des déclencheurs - mais l'implémentation sera spécifique au SGBD (puisque vous devrez implémenter un déclencheur AFTER INSERT différent en utilisant le mécanisme (spécifique) de la base de données sous-jacente.

Vous ne pourrez pas spécifier de contrainte UNIQUE d'aucune sorte sur ce champ car les insertions et les tables de base peuvent potentiellement avoir des entrées en double pour chaque ligne que vous modifiez (c'est ainsi que les mises à jour sont modélisées dans les bases de données versionnées). Si vous faites l'erreur de le faire sur la table de base, vous finirez par le réaliser lorsque vos opérations de compression commenceront à échouer ...

Ragi Yaser Burhum
la source