मेरे पास एक ही समस्या है जिसके साथ मैं काम कर रहा हूं, मेरे मामले में इसका समाधान रिमोट_ड नामक स्थानीय तालिकाओं में एक अतिरिक्त अशक्त क्षेत्र बनाना था। जब स्थानीय से दूरस्थ डेटाबेस में रिकॉर्ड सिंक्रनाइज़ किया जा रहा है यदि Remote_id शून्य है, तो इसका मतलब है कि इस पंक्ति को कभी भी सिंक्रनाइज़ नहीं किया गया है और दूरस्थ पंक्ति आईडी से मेल खाते एक अद्वितीय आईडी को वापस करने की आवश्यकता है।
Local Table Remote Table
_id (used locally)
remote_id ------------- id
name ------------- name
क्लाइंट एप्लिकेशन में मैं टेबल को _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 क्षेत्र को अद्यतन करने के लिए कहने पर, यह प्रभावित तालिकाओं को अद्यतन करने वाले sqlite में पहले से निर्मित ट्रिगर को आग लगा देता है।
http://www.sqlite.org/lang_createtrigger.html
1- रिमोट_ड सर्वर में उत्पन्न होता है
2- क्लाइंट को सिग्नल देता है
3- क्लाइंट अपने _id फील्ड को अपडेट करता है और एक ट्रिगर को फायर करता है जो लोकल टेब को जोड़ने वाली लोकल टेबल को अपडेट करता है
बेशक मैं सिंक्रोनाइज़ेशन में मदद करने के लिए और डुप्लिकेट किए गए सिंक से बचने के लिए एक last_updated फ़ील्ड का भी उपयोग करता हूं।