同期テーブルのプライマリ・キーは更新しないでください。プライマリ・キーは、異なるデータベース (リモートと統合) 内の同じローを識別する唯一の方法であり、競合を検出する唯一の方法なので、プライマリ・キーを更新すると、プライマリ・キーの目的が無効になります。
競合はエラーとは異なります。競合が起こる可能性がある場合は、適切な値を計算するプロセスを定義するか、最低でも競合のログを取ってください。優れたアプリケーションを設計するには、競合の解決は不可欠です。
同期のダウンロード処理中は、リモート・データベースでは競合は発生しません。ダウンロードしたローに新しいプライマリ・キーが含まれている場合は、その値は新しいローに挿入されます。新しいプライマリ・キーが既存のローのプライマリ・キーと一致する場合は、そのローの値が更新されます。
User1 が最初に 10 個の在庫を売り出し、そのうち 3 個を販売して、Remote1 にある在庫の値を 7 個に更新します。User2 は 4 個販売し、Remote2 にある在庫を 6 に更新します。Remote1 が同期を実行すると、統合データベースは 7 に更新されます。Remote2 が同期を実行すると、在庫の値が 10 ではなくなっているため、競合が検出されます。この競合をプログラムで解決するには、次のような 3 つのロー値が必要となります。
統合データベースにある現在の値。
Remote2 がアップロードした新しいローの値。
Remote2 が最後の同期中に取得した古いローの値。
この場合、ビジネス論理は新しい在庫数を計算し、競合を解決するために次の方法を使用できます。
current consolidated - (old remote - new remote) -> 7 - (10-6) = 3 |
競合の処理方法に関するその他の例については、次の項を参照してください。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |