Modifica perché in realtà non ho risposto alla domanda.
Non penso che dovresti eliminare i dati dal sistema degli utenti quando si disconnettono.
Non conosco il tuo caso d'uso, quindi non posso dirlo con certezza. Ma suona come, quello che dovresti davvero fare, è pigro caricare i tuoi dati su richiesta e poi metterli nella cache localmente.
Dalla tua domanda, sembra che tu voglia caricare l'intero set di dati, indipendentemente dal fatto che l'utente ne abbia bisogno o meno.
Se si può caricare pigro (caricare ogni articolo solo quando l'utente lo richiede), è possibile creare un sistema di cache sul dispositivo che consenta un accesso frequente rapido.
Per quanto riguarda l'accesso offline, suggerisco caldamente che invece di affrontare situazioni in cui Z apporta modifiche dopo X, ma Z è online e X non lo è. Se stavo creando la tua applicazione, spingere strongmente per mettere l'applicazione in una modalità offline di sola lettura. Pertanto, se X non è in linea, può leggere l'archivio dati locale (o la cache) ma non può apportare modifiche o eliminare record finché non viene stabilita una connessione.
Questo ti risparmia un sacco di mal di testa e rende la tua implementazione molto più semplice.
Infine, per rilevare le modifiche tra il sistema locale e i dati nel database, ci sono due modi per andare. Mantenere un timestamp modificato sul server per ogni record. Se il record sul sistema è precedente, aggiornare l'elemento memorizzato nella cache. Altrimenti lascia. In alternativa è possibile eseguire l'hash dei dati e confrontarli per verificare le modifiche. Personalmente di solito vado solo al timestamp, in quanto la maggior parte degli oggetti già desidero una data creata e aggiornata.
Spero che questo aiuti.