ฉันมีปัญหาเดียวกันกับโครงการที่ฉันทำงานอยู่การแก้ปัญหาในกรณีของฉันคือการสร้างเขตข้อมูล nullable พิเศษในตารางท้องถิ่นชื่อ remote_id เมื่อซิงโครไนซ์เร็กคอร์ดจากโลคัลฐานข้อมูลรีโมตหาก remote_id เป็นโมฆะหมายความว่าแถวนี้ไม่เคยถูกซิงโครไนซ์และต้องการส่งคืน id เฉพาะที่ตรงกับ 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 อาจไม่ตรงกับรหัสจริงในตารางท้องถิ่นหรือตารางระยะไกลดังนั้นเมื่อใดก็ตามที่สร้าง remote_id มันจะส่งสัญญาณไปยังแอพพลิเคชันของลูกค้า ขอให้อัปเดตฟิลด์ _id ท้องถิ่นนี่เป็นการเรียกทริกเกอร์ที่สร้างไว้ก่อนหน้านี้ใน sqlite เพื่ออัปเดตตารางที่ได้รับผลกระทบ
http://www.sqlite.org/lang_createtrigger.html
1- remote_id ถูกสร้างขึ้นในเซิร์ฟเวอร์
2- ส่งคืนสัญญาณให้กับลูกค้า
3- ไคลเอนต์อัพเดทฟิลด์ _id ของมันและยิงทริกเกอร์ที่อัพเดตตารางท้องถิ่นที่เข้าร่วมท้องถิ่น _id
แน่นอนฉันใช้ฟิลด์ last_updated เพื่อช่วยในการซิงโครไนซ์และเพื่อหลีกเลี่ยงการซิงค์ซ้ำ