私が取り組んでいるプロジェクトでも同じ問題があります。私の場合の解決策は、remote_idという名前のローカルテーブルに追加のnull許容フィールドを作成することでした。remote_idがnullの場合、ローカルデータベースからリモートデータベースにレコードを同期する場合、この行は一度も同期されておらず、リモート行IDと一致する一意のIDを返す必要があることを意味します。
Local Table Remote Table
_id (used locally)
remote_id ------------- id
name ------------- name
クライアントアプリケーションでは、テーブルを_idフィールドでリンクし、リモートでリモートIDフィールドを使用してデータを取得したり、結合したりします。
ローカルの例:
Local Client Table Local ClientType Table Local ClientType
_id
remote_id
_id -------------------- client_id
remote_id client_type_id -------------- _id
remote_id
name name name
リモートの例:
Remote Client Table Remote ClientType Table Remote ClientType
id -------------------- client_id
client_type_id -------------- id
name name name
client_typeテーブルはローカルテーブルまたはリモートテーブルの実際のIDと一致しない可能性があるため、このシナリオは、コードに論理的なものがないと、データ整合性エラーを引き起こします。したがって、remote_idが生成されるたびに、クライアントアプリケーションに信号を返しますローカル_idフィールドの更新を要求すると、これは、影響を受けるテーブルを更新するsqliteで以前に作成されたトリガーを起動します。
http://www.sqlite.org/lang_createtrigger.html
1-remote_idはサーバーで生成されます
2-クライアントにシグナルを返します
3-クライアントは_idフィールドを更新し、ローカル_idに参加するローカルテーブルを更新するトリガーを起動します
もちろん、同期を支援し、同期の重複を避けるために、last_updatedフィールドも使用します。