Üzerinde çalışmakta olduğum bir projeyle aynı sorunu yaşıyorum, benim durumumdaki çözüm remote_id adlı yerel tablolarda fazladan boş bir alan yaratmaktı. Remote_id null değerindeyse kayıtları yerelden uzak veritabanına senkronize ederken, bu satırın hiç senkronize edilmediği ve uzak satır kimliğiyle eşleşen benzersiz bir kimlik döndürmesi gerektiği anlamına gelir.
Local Table Remote Table
_id (used locally)
remote_id ------------- id
name ------------- name
İstemci uygulamasında tabloları _id alanına bağlarım, uzaktan veri toplamak, birleştirmek, vb. Yapmak için uzaktaki id alanını kullanırım.
yerel olarak örnek:
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
uzaktan örnek:
Remote Client Table Remote ClientType Table Remote ClientType
id -------------------- client_id
client_type_id -------------- id
name name name
Bu senaryo ve kodda herhangi bir mantık olmadan, client_type tablosu yerel ya da uzak tablolardaki gerçek kimlikle eşleşmeyebileceği için veri bütünlüğü hatalarına neden olur, bunun için bir remote_id oluşturulduğunda, istemci uygulamasına bir sinyal verir yerel _id alanını güncellemek isteyen bu, etkilenen tabloları güncelleyerek sqlite'da önceden oluşturulmuş bir tetikleyiciyi tetikler.
http://www.sqlite.org/lang_createtrigger.html
1- remote_id sunucuda üretildi
2- müşteriye bir sinyal verir
3- müşteri _id alanını günceller ve yerel _id'e katılan yerel tabloları güncelleyen bir tetikleyici başlatır
Tabii ki, senkronizasyonlara yardımcı olmak ve çoğaltılmış senkronizasyonlardan kaçınmak için bir last_updated alanını da kullanıyorum.