Saya memiliki masalah yang sama dengan proyek yang sedang saya kerjakan, solusi dalam kasus saya adalah membuat bidang nullable tambahan di tabel lokal bernama remote_id. Ketika menyinkronkan catatan dari database lokal ke jarak jauh jika remote_id adalah nol, itu berarti bahwa baris ini tidak pernah disinkronkan dan perlu mengembalikan id unik yang cocok dengan id baris jarak jauh.
Local Table Remote Table
_id (used locally)
remote_id ------------- id
name ------------- name
Dalam aplikasi klien saya menautkan tabel dengan bidang _id, jarak jauh saya menggunakan bidang id jarak jauh untuk mengambil data, bergabung, dll.
contoh lokal:
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
contoh jarak jauh:
Remote Client Table Remote ClientType Table Remote ClientType
id -------------------- client_id
client_type_id -------------- id
name name name
Skenario ini, dan tanpa logika apa pun dalam kode, akan menyebabkan kegagalan integritas data, karena tabel client_type mungkin tidak cocok dengan id asli baik di tabel lokal atau jauh, karenanya setiap kali remote_id dibuat, ia mengembalikan sinyal ke aplikasi klien meminta untuk memperbarui bidang _id lokal, ini memicu pemicu yang sebelumnya dibuat di sqlite memperbarui tabel yang terpengaruh.
http://www.sqlite.org/lang_createtrigger.html
1- remote_id dibuat di server
2- mengembalikan sinyal ke klien
3- klien memperbarui bidang _id-nya dan mengaktifkan pemicu yang memperbarui tabel lokal yang bergabung dengan _id lokal
Tentu saja saya juga menggunakan bidang last_updated untuk membantu sinkronisasi dan untuk menghindari duplikat sinkronisasi.