Ist es möglich, Primärschlüssel in versionierten Feature-Classes ohne arcobjects-Code zu verwalten?

11

Da es keine gute Idee ist , ObjectIDs als Primärschlüssel in Beziehungen zu verwenden, muss eine andere Spalte verwendet werden. Ist es möglich, DBMS-Sequenzen zum Auffüllen von Primärschlüsselspalten in versionierten Feature-Classes zu verwenden, oder muss ich dazu arcobjects-Code schreiben?

Ich habe gehört, dass globale IDs verwendet werden können , aber Nicht-GIS-Datenbankadministratoren, die verwandte Tabellen verwalten, sehen diese Idee oft missbilligend.

Kirk Kuykendall
quelle
Verschieben meiner Antwort auf einen Kommentar, da mein Gedächtnis schlecht ist und es möglicherweise nicht richtig funktioniert hat: Vor einigen Jahren habe ich versucht, einen Einfügetrigger für die Add-Tabelle zu verwenden. Wenn ich mich richtig erinnere, hat das funktioniert. Ich ging schließlich (und schnell) zu einer ArcObjects-Lösung (die als gespeicherte Prozedur bezeichnet wurde), weil es (für mich) einfacher war, weil ich beim Hinzufügen / Versionsieren einer neuen Feature-Class keinen neuen Trigger schreiben musste.
Jay Cummins
2
Ich denke, es war ein AFTER INSERT-Trigger (Orakel) mit einer Nullprüfung, sodass die neue Zeile den vorhandenen Primärschlüsselwert erhalten würde, wenn sie verschoben würde. Wenn es null wäre, würde es füllen. Vielleicht irre ich mich und es hat nicht richtig funktioniert und ich habe es nicht bemerkt. Welche Datenbank verwendet?
Jay Cummins
@ Jay Danke für die Ausarbeitung. Mein Hauptgrund für diese Frage ist, festzustellen, ob es neben dem Arcobjects-Code, den ich dafür geschrieben habe, noch andere Ansätze für dieses Problem gibt. Ich möchte niemandem sagen, dass meine Lösung die einzig mögliche Lösung ist, ohne gründlich nachzuforschen. Und wenn ja, wie schwierig ist es, es zu warten. Ich schreibe nur gelegentlich gespeicherte Prozeduren, und das meiste davon befindet sich auf einem SQL Server. Ich vermute, dass es eine Möglichkeit gibt, dies auf DBMS-Ebene (anstelle von ArcObjects) zu tun, habe es aber noch nie über alle DBMS hinweg genau betrachtet.
Kirk Kuykendall

Antworten:

7

Ja, das ist möglich - mit ein paar Einschränkungen.

Sie können dies mit Triggern tun - die Implementierung ist jedoch DBMS-spezifisch (da Sie einen anderen AFTER INSERT-Trigger mithilfe des zugrunde liegenden (spezifischen) Datenbankmechanismus implementieren müssen.

Sie werden nicht auf diesem Feld eine UNIQUE - Einschränkung jeglicher Art angeben Lage sein , da die Einsätze und die Basistabellen möglicherweise doppelte Einträge für jede Zeile haben können , dass Sie ändern (Das ist , wie Updates in versioniert Datenbanken modelliert werden). Wenn Sie den Fehler machen, dies in der Basistabelle zu tun, werden Sie dies schließlich bemerken, wenn Ihre Komprimierungsvorgänge fehlschlagen ...

Ragi Yaser Burhum
quelle