Tôi có cùng một vấn đề với một dự án tôi đang thực hiện, giải pháp trong trường hợp của tôi là tạo ra một trường nullable bổ sung trong các bảng cục bộ có tên remote_id. Khi đồng bộ hóa các bản ghi từ cơ sở dữ liệu từ xa sang cơ sở dữ liệu từ xa nếu remote_id là null, điều đó có nghĩa là hàng này chưa bao giờ được đồng bộ hóa và cần trả về một id duy nhất khớp với id hàng từ xa.
Local Table Remote Table
_id (used locally)
remote_id ------------- id
name ------------- name
Trong ứng dụng khách tôi liên kết các bảng theo trường _id, từ xa tôi sử dụng trường id từ xa để tìm nạp dữ liệu, tham gia, v.v.
ví dụ tại địa phương:
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
ví dụ từ xa:
Remote Client Table Remote ClientType Table Remote ClientType
id -------------------- client_id
client_type_id -------------- id
name name name
Kịch bản này và không có bất kỳ logic nào trong mã sẽ gây ra lỗi toàn vẹn dữ liệu, vì bảng client_type có thể không khớp với id thực trong bảng cục bộ hoặc từ xa, bất cứ khi nào remote_id được tạo, nó sẽ trả về tín hiệu cho ứng dụng khách yêu cầu cập nhật trường _id cục bộ, điều này kích hoạt trình kích hoạt được tạo trước đó trong sqlite cập nhật các bảng bị ảnh hưởng.
http://www.sqlite.org/lang_createtrigger.html
1- remote_id được tạo trong máy chủ
2- trả lại tín hiệu cho khách hàng
3- khách hàng cập nhật trường _id của nó và kích hoạt trình kích hoạt cập nhật các bảng cục bộ tham gia local _id
Tất nhiên tôi cũng sử dụng một trường last_updated để giúp đồng bộ hóa và để tránh các đồng bộ trùng lặp.