我有一个依赖于MySQL数据库的Web应用程序,我正在考虑构建一个iPhone应用程序。此应用程序将允许用户在Web应用程序上浏览/插入/更新/删除其帐户上的数据。
最简单的方法是将iPhone应用程序简单地构建为Web应用程序的界面,即每个操作都需要连接到Web。但是,我希望iPhone应用程序拥有自己的“离线”版本的数据库。这不仅可以让用户脱机工作,还可以提供更好的体验,因为本地所有内容都意味着更快,响应更快的应用程序。
我会通过使用时间戳并保持最新版本来处理冲突(我已经使用了软删除,即当用户删除记录时我只是设置了一个标志),但我还没有弄清楚如何处理插入。实际上,如果用户在离线(iPhone应用程序)和在线(Web应用程序)数据库上插入新项目,则会出现主键冲突(我的所有表都有一个INTEGER字段,其中自动增量为主键)。我该如何处理这个问题?
我正在考虑使用双列主键,一个是自动递增的整数,第二个是特定于“设备”。这样,通过网络应用程序添加的新记录将具有ID 1-web,2-web等,以及通过iPhone应用程序1-iphone,2-iphone等创建的...这将允许合并两者数据库没有冲突。你怎么看待这个想法?
答案 0 :(得分:5)
到目前为止,最简单的解决方案是使用UUID。
不太优雅的解决方案是让iPhone ID占用密钥空间的已定义子集。例如,使用64位密钥,可以为每个iPhone分配最高20位的特定模式。