从服务器同步时如何构建本地数据库以删除行
Posted
技术标签:
【中文标题】从服务器同步时如何构建本地数据库以删除行【英文标题】:How to structure local database for deleting rows when syncing from server 【发布时间】:2019-01-08 14:05:24 【问题描述】:我目前有一个本地 SQLite 数据库,该数据库会定期从服务器更新。
最初,本地数据库将为空。该应用程序将获取整个服务器数据库作为 json,并在本地插入所有新行。
一段时间后,应用程序将再次以 json 格式获取整个服务器数据库,并插入任何新行,或更新任何已更改的现有行。
现在,问题是服务器的数据库是否删除了一个项目(行)。应用永远不会知道这些被移除的项目,并且会永远存在于本地。
处理这个问题的最佳方法是什么?
一些想法:
在每个项目上添加一个“已删除”标志。这将允许应用程序删除任何项目,但这似乎更难维护,并且每个表都有很多更改。尽管它也允许您取消删除项目。 和flag的思路一样,修改为已有字段,返回即可。例如,返回一个否定的 id (id = 150
-> id = -150
)。这不需要任何数据库更改,但会让不知道发生了什么的人感到困惑。
修改结果以返回“已删除”项目的列表。这不会做太多工作,但似乎也不是一个好的解决方案。
是否有任何标准模式可以遵循?
谢谢。
【问题讨论】:
Synchronizing data between SQLite (android) and MS-SQL (Hosting)的可能重复 我不认为这是一个骗局,这个问题只是关于同步数据,他们只提到插入/更新。我的问题是关于删除已经从服务器/后端删除的行。 可以看看source code ...我可以看到它包括 insert , update , delete .. . 【参考方案1】:您可以使用 Realm 代替 SQLite 以获得更好的体验,并且当应用从服务器获取数据时清除领域中的所有数据并插入新记录,它不会保存已删除的项目。
谢谢。
【讨论】:
我目前正在使用 Room。不,我不想清理桌子,那会很贵。 然后为delete_status创建一个列。如果该行被删除,则更改它。以上是关于从服务器同步时如何构建本地数据库以删除行的主要内容,如果未能解决你的问题,请参考以下文章
如何更灵活的处理 CloudKit 从云端同步到本地的 CoreData 托管对象