Ich habe das gleiche Problem mit einem Projekt, an dem ich arbeite. In meinem Fall bestand die Lösung darin, ein zusätzliches nullwertfähiges Feld in den lokalen Tabellen mit dem Namen remote_id zu erstellen. Wenn Datensätze von der lokalen zur fernen Datenbank synchronisiert werden, wenn remote_id null ist, bedeutet dies, dass diese Zeile nie synchronisiert wurde und eine eindeutige ID zurückgeben muss, die mit der fernen Zeilen-ID übereinstimmt.
Local Table Remote Table
_id (used locally)
remote_id ------------- id
name ------------- name
In der Client-Anwendung verbinde ich Tabellen mit dem Feld _id, verwende das Feld "Remote-ID" aus der Ferne, um Daten abzurufen, Verknüpfungen durchzuführen usw.
Beispiel vor Ort:
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
Beispiel aus der Ferne:
Remote Client Table Remote ClientType Table Remote ClientType
id -------------------- client_id
client_type_id -------------- id
name name name
Dieses Szenario ohne logischen Code würde zu Fehlern bei der Datenintegrität führen, da die Tabelle client_type möglicherweise weder in der lokalen noch in der entfernten Tabelle mit der tatsächlichen ID übereinstimmt. Daher gibt sie bei jeder Erzeugung einer remote_id ein Signal an die Clientanwendung zurück Wenn Sie aufgefordert werden, das lokale Feld _id zu aktualisieren, wird ein zuvor erstellter Trigger in sqlite ausgelöst, der die betroffenen Tabellen aktualisiert.
http://www.sqlite.org/lang_createtrigger.html
1- remote_id wird auf dem Server generiert
2- gibt ein Signal an den Client zurück
3- Der Client aktualisiert das Feld _id und löst einen Trigger aus, der die lokalen Tabellen aktualisiert, die der lokalen _id beitreten
Natürlich verwende ich auch ein last_updated-Feld, um Synchronisationen zu unterstützen und doppelte Synchronisationen zu vermeiden.