PROBLEM

Änderungen an Beziehungen bei denen die ObjectID der Primärschlüssel ist werden bei der bidirektionalen und der unidirektionalen Replikation möglicherweise nicht korrekt synchronisiert

Last Published: January 8, 2021

Beschreibung

Der Primärschlüssel für eine Beziehung kann auf einer von einer Geodatabase verwalteten GlobalID, auf einem von einer Anwendung oder einem Kunden verwalteten Primärschlüssel oder auf einer von einer Geodatabase verwalteten ObjectID basieren. In bestimmten Anwendungsfällen werden Änderungen, an denen Beziehungen beteiligt sind, möglicherweise nicht korrekt synchronisiert, wenn der Primärschlüssel für die Beziehung auf einer ObjectID-Spalte (OID) basiert.

Hinweis: Dieser Artikel gilt nur für die ArcGIS-Versionen 9.x. Höhere Versionen von ArcGIS enthalten möglicherweise andere Funktionalität sowie andere Namen für Menüs, Befehle und Geoverarbeitungswerkzeuge, die sich auch an anderen Orten befinden können.

Das folgende Beispiel zeigt einen Anwendungsfall, bei dem Änderungen nicht korrekt synchronisiert werden.

Betrachten Sie ein Beispiel mit einer Feature-Class für Masten (Poles) und einer Tabelle der Transformatoren (Transformers) in einem bidirektionalen Replikat. In diesem Beispiel besteht eine einfache Beziehung zwischen den Masten und Transformatoren. "Poles" ist die Quellklasse, und der Primärschlüssel ist die zugehörige ObjectID-Spalte. "Transformers" ist die Zielklasse, und der Fremdschlüssel ist die Spalte "poleid" des Datentyps Long Integer.

Das folgende Beispiel beschreibt einen Anwendungsfall, bei dem Beziehungen nicht korrekt synchronisiert werden.

  1. Ein neuer Mast (objectid = 10) wird der primären Replikat-Geodatabase hinzugefügt.
  2. Ein neuer Transformator (objectid = 100) wird dem primären Replikat hinzugefügt.
  3. Anschließend wird das sekundäre ausgehend vom primären Replikat synchronisiert, wobei der neue Mast und der neue Transformator dem sekundären Replikat hinzugefügt werden. Dem neuen Mast im sekundären Replikat wird die objectid 12 zugewiesen. Das liegt daran, dass die objectid 10 bereits von einem anderen Feature im sekundären Replikat verwendet wird. Dem neuen Transformator wird die objectid 105 zugewiesen. Die GlobalIDs für diese Zeilen sind mit den entsprechenden Werten in der primären Geodatabase identisch und werden für die Aufrechterhaltung der nachfolgenden Entsprechung zwischen Features verwendet.
  4. In der primären Geodatabase wird eine neue Beziehung zwischen dem Flurstück mit objectid 10 und dem Transformator mit objectid 100 hinzugefügt. Dadurch wird der eingebettete poleid-Wert (Fremdschlüssel) in der Transformatorzeile auf 10 festgelegt.
  5. Anschließend wird noch einmal das sekundäre ausgehend vom primären Replikat synchronisiert. Die Änderung an der Transformatorzeile in der primären Geodatabase wird in die Transformatorzeile in der sekundären Geodatabase mit objectid 105 übernommen (wobei über die GlobalIDs die Entsprechung hergestellt wird). Der aktualisierte Wert der poleid in der sekundären Transformatorzeile ist jedoch falsch. Sie wurde auf 10 aktualisiert, hätte aber auf 12 aktualisiert werden müssen.

Das oben beschriebene Beispiel würde korrekt funktionieren, wenn die Änderung zum Erstellen der Beziehung zwischen dem Mast und dem Transformator in derselben Generation der Änderungen erfolgt, in der der Mast und der Transformator ursprünglich erstellt wurden. Zum Beispiel, wenn die Beziehung vor der Synchronisierung in Schritt 3 erstellt wurde. Der Synchronisierungsalgorithmus erfasst die Änderung an der ObjectID des Mastes bei der Erstellung und verwendet sie, um den Fremdschlüssel im Transformator korrekt zu aktualisieren.

Hinweise zu Anwendungsfällen, bei denen Änderungen korrekt synchronisiert werden:

Die Anwendungsfälle, bei denen Änderungen korrekt synchronisiert werden, entsprechen allgemeinen Workflows mit Feature-bezogenen Annotationen, die auf der ObjectID als Primärschlüssel basieren. Im am häufigsten verwendeten Workflow erfolgt das Erstellen eines Features zusammen mit der auf dieses Feature bezogenen Annotation im Rahmen derselben Editiersitzung. Nachdem eine Annotation für ein Feature erstellt wurde, wird ihre Beziehung mit diesem Feature bei nachfolgenden Änderungen nicht geändert. Allerdings werden nicht alle Workflows mit Feature-bezogenen Annotationen unterstützt. Zum Beispiel wird das Erstellen eines neuen Teils einer zugehörigen Annotation für ein Feature in einer Generation ohne Erstellung des Features nicht unterstützt. Die Workflows, die unterstützt werden, basieren auf ArcGIS 9.2 Service Pack 5.

Ursache

In bestimmten Anwendungsfällen (siehe oben im Abschnitt mit der Beschreibung) werden Änderungen, an denen Beziehungen beteiligt sind, mit der bidirektionalen und der unidirektionalen Replikation möglicherweise nicht korrekt synchronisiert, wenn der Primärschlüssel für die Beziehung auf einer ObjectID-Spalte (OID) basiert.

Lösung oder Problemumgehung

Dieses Problem wurde in ArcGIS 9.2 Service Pack 6 und ArcGIS 9.3 behoben. Ein weiterer Fall wurde auch im folgenden Patch für ArcGIS 9.2 Service Pack 6 sowie in ArcGIS 9.3 Service Pack 1 behoben.

Nicht aufgetreten ist dieses Problem beim Bearbeiten und Synchronisieren der Beziehungen mit bidirektionalen und unidirektionalen Replikaten, die GlobalID-Spalten oder vom Kunden definierte Primärschlüssel, wie zum Beispiel EquipmentID, die über alle Datenbanken eindeutig sind, als Primärschlüssel in der Beziehung verwenden.

Im obigen Beispiel, bei dem Änderungen nicht korrekt synchronisiert werden, könnte die Beziehungsklasse mit der GlobalID-Spalte aus "Poles" als Primärschlüssel und einer GUID-Spalte aus "Transformers" als Fremdschlüssel definiert worden sein. Beziehungsklassen, die eine GlobalID als Primärschlüssel verwenden, erfordern eine GUID-Spalte als Fremdschlüssel. In diesem Anwendungsfall wäre die Beziehung korrekt synchronisiert worden, da die Werte der GlobalID und der GUID in allen Replikaten identisch sind.

Artikel-ID:000009966

Hilfe von ArcGIS-Expert*innen erhalten

Technischen Support kontaktieren

Die Esri Support-App herunterladen

Zu den Download-Optionen

Zugehörige Informationen

Weitere Informationen zu diesem Thema erkunden