フィルタと関連データによる同期
このトピックは、ArcEditor および ArcInfo にのみ適用されます。
双方向レプリケーションと一方向レプリケーションでは、レプリカの作成時に使用された同じフィルタおよびリレーションシップ クラス ルールが同期を実行する際に適用されます。ただし、選択セットに基づくフィルタは例外です。送信する変更を決定する際には、最後の同期以降に適用された各レプリカ データセットのすべての編集が評価されます。レプリカのフィルタを満たしている編集は、同期の対象となります。
次の図は、編集セッションでフィーチャを移動した場合、同期の際にレプリカ エリア フィルタがどのように適用されるかを示しています。同期の際に、次の編集が相対レプリカに送信されます。
- レプリカ エリア内の新しい位置に移動したフィーチャ。
- レプリカ エリアの内側から外側へ移動したフィーチャ。フィーチャの新しい位置は、レプリカ エリアの外側であっても、同期の際に相対レプリカで更新されます。メモ:編集によってフィーチャが送信されるのは、前回の同期時にレプリカ エリアの内側に存在していた場合に限られます。たとえば、新規にフィーチャをレプリカ エリア内に挿入した後で、レプリカ エリアの外側に移動した場合、相対レプリカとの同期の際に、それらの変更は送信されません。
- レプリカ エリアの外側から内側へ移動したフィーチャ。
レプリカ エリアの内側に位置していないフィーチャを移動した場合(シナリオ 4)、そのフィーチャは同期の際に相対レプリカで更新されません。
選択セットに基づくフィルタは、レプリカ作成時には適用されますが、同期の際には無視されます。同期プロセスでは選択セット フィルタがすべての行であるように扱われます。たとえば、レプリカ作成時にテーブルから複製する行を定義するために選択セットだけを利用した場合、そのテーブルに対するすべての変更が同期の際に適用されます。しかしレプリカ作成時に、テーブルから複製する行を定義するために選択セットだけでなく他のフィルタも使用した場合、同期の際には他のフィルタだけが適用されます。たとえば、レプリカ作成時に選択セットとフィルタ設定を適用すると、同期の際にはフィルタ設定だけが適用されます。
レプリカに含まれているデータにリレーションシップ クラスが存在している場合は、同期プロセスに影響を与えます。次に、同期の際にリレーションシップ クラスがどのように適用されるかについて説明します。
編集がフィルタを満たしていない場合でも、次の条件を満たしていれば、同期の対象となります。
- [スキーマのみ] フィルタを持つデータセットに属し、1 つ以上のリレーションシップ クラスに関与している。
さらに、次の条件のいずれかを満たす必要もあります。
- フィルタを満たしている別のデータセットの行に関与している。その行が最後の同期以降に編集されている必要はない。
- [スキーマのみ] フィルタを持つデータセットに関連するデータセットに属している。
上記の条件は一方で、[スキーマのみ] 以外のフィルタを持つフィーチャクラスまたはテーブルの行を同期できるのは、フィルタ条件を満たしている場合だけであることを意味します。
また、上記の条件は、関連データの追跡も可能にします。これは、複数のリレーションシップを通じて、関連先クラスの行から関連元のクラスの行をたどることが可能である場合に発生します。
例
次の例では、選択された3 つの建物が複製されています。関連レコードはレプリカの作成時に追加されているため、関連先クラスも複製されます。関連元フィーチャ(建物)に関連する関連先クラスのフィールドが、子レプリカで編集された場合、レプリカを同期する際に、これらの編集は親レプリカの関連先クラスに反映されます。
リレーションシップの維持
リレーションシップは同期の過程においても維持されます。たとえば、相対レプリカに追加された新しいレコード間のリレーションシップは、関連する行の同期時の際にも維持されます。関連元のキーが ObjectID フィールドである場合、リレーションシップを維持するには、変更を受信するレプリカで外部キーの値を変更しなければならない場合があります。
次に、関連レコードが同期される方法を示す例を紹介します。
例 1
最初の例では、選択された関連元クラスのフィーチャ(建物)が複製されています。これらの建物は、非属性リレーションシップを通じて、レプリケーションから含まれていないテーブルの属性レコードに関連付けられています。子レプリカでの編集の際、建物が 1 つ削除された場合、親レプリカにこの編集が同期されると削除されたフィーチャのリレーションシップを無効にするために、関連先クラス(テーブル)の外部キー フィールドの該当するエントリが NULL に設定されます。
この同期により、属性リレーションシップ クラス テーブルにおいて、同期によって削除されたリレーションシップを表す行が削除されることがあります(次の例を参照してください)。
例 2
この例では、関連元フィーチャクラスと関連先クラス テーブル間のリレーションシップに属性が付いています。これは、リレーションシップ自体に関連テーブルが存在することを意味します。リレーションシップと関連先クラス(テーブル)はどちらも、レプリカには含まれていません。子レプリカでの関連元フィーチャクラスの編集により、フィーチャが 1 つ削除されます。同期の際に、この関連元のフィーチャと関連先クラスのレコード間のリレーションシップを表す属性リレーションシップ クラス テーブルの行が削除されます。
同期時に削除されるのはリレーションシップだけです。関連オブジェクト自体は決して削除されません。