双方向レプリケーションおよび一方向レプリケーションでは、同じフィルターとレプリカ作成の際に使用されるリレーションシップ クラス ルールが、同期中に適用されます。送信する変更を決定するときに、最後の同期の後で適用された各レプリカ データセット内のすべての編集内容が評価されます。編集内容がレプリカのフィルターの条件に適合する場合は、同期されます。
メモ:
チェックアウト/チェックイン レプリカでは、子レプリカで行われたすべての編集内容が同期されます。したがって、次のルールはリレーションシップの維持のセクション内のものを除き、チェックアウト/チェックイン レプリカには適用されません。
次の画像は、フィーチャを編集セッション中に移動した場合、同期中にどのようにレプリカ エリア フィルターが適用されるかを示しています。同期中は、次の編集内容が相対レプリカに送信されます。
- フィーチャは、レプリカ エリア内の新しい場所に移動されます。
- フィーチャは、レプリカ エリア内から外へ移動されます。フィーチャの新しい場所は、同期中に相対レプリカで更新されますが、その場所はレプリカ エリアの外になります。
メモ:
送信される編集内容では、以前の同期時に、間違いなくそのフィーチャがレプリカ フィルターの内側に存在していました。たとえば、フィーチャを挿入して、そのフィーチャを外へ移動してから相対レプリカと同期した場合、これらの変更は送信されません。
- フィーチャは、レプリカ エリアの外からレプリカ エリア内に移動されます。
- レプリカ エリア内ではない場所のフィーチャを移動する場合、相対レプリカでは同期中に更新されません。
編集内容がフィルターの条件に適合しない場合は、次の基準を満たすときに同期できます。
- スキーマのみのフィルター付きのデータセットに属していて、少なくとも 1 つのリレーションシップ クラスに関係しています。
- 同時に、次のいずれかを満たしています。
- フィルターの条件に適合する別のデータセットの行に関係しています。関係している行は、最終同期後に編集が行われている必要はありません。
- スキーマのみのフィルター付きのデータセットに関係しているデータセット内にあります。
つまり、スキーマのみのフィルター以外のフィルター付きのフィーチャクラスまたはテーブル内の行は、フィルター条件を満たす場合にのみ、同期されることができます。
これらのルールにより、関連データの連結が可能になります。これは、リレーションシップ クラスを通してレプリカ内の関連元まで戻り、複数のリレーションシップを通して遠くの関連先クラス内の行をトレースできるときに発生します。
リレーションシップの維持
同期は、リレーションシップを維持します。たとえば、新しいリレーションシップを相対レプリカに追加すると、関連する行が同期されるときに維持されます。リレーションシップの維持は、関連元キーが objectID フィールドである場合、変更を受けるレプリカの外部キーの値の変更を必要とする場合があります。
次に、同期中の関連レコードの動作を説明する例を紹介します。
例
この例では、レプリケーション用にフィルター設定を使用して 3 つの建物が選択されています。関連レコードがレプリカ作成プロセスに含まれるため、関連する関連先クラスもレプリケーションされます。関連元フィーチャに関する関連先クラス内のフィールドは、子レプリカで編集されます。レプリカを同期したときに、これらの編集が親レプリカ内の関連する関連先クラスで更新されます。
例 1
この最初の例では、複数の関連元クラスのフィーチャである建物が、レプリケーションの対象として選択されました。建物は、シンプル リレーションシップ クラスを使って、レプリケーションから除外されたテーブル内の属性レコードに関連付けられます。子レプリカの編集中に、建物が削除されました。同期時に、削除されたフィーチャとの関係を無効にするために、関連する関連先クラス (テーブル) の外部キー フィールド内の対応するエントリが、NULL に設定されます。
また、この同期動作は、属性付きのリレーションシップ クラス テーブル内のリレーションシップを表す行が削除される原因となることもあります (次の例を参照)。
例 2
この例では、関連元フィーチャクラスと関連先クラス テーブルのリレーションシップが属性付きです。これは、リレーションシップ自体に関連するテーブルが含まれていることを意味します。リレーションシップと関連先クラスの両方が、レプリカ作成プロセスから除外されました。子レプリカの関連元フィーチャクラスで行われた編集は、1 つのフィーチャが削除される原因となります。同期時に、このフィーチャの関連先クラス内のオブジェクトに対するリレーションシップを表している属性付きのリレーションシップ クラス テーブル内の行が削除されます。
リレーションシップのみが、同期時に削除されますが、関連オブジェクト自体が削除されることはありません。