维护移动客户端和服务器之间的参照完整性

时间:2012-01-31 19:45:53

标签: sql sql-server sqlite synchronization referential-integrity

所以我有一个相对简单的系统。 移动客户端在sqlite数据库中创建记录,我希望将其同步到远程SQL服务器(与其他移动客户端共享)。因此,当我在手机的sqlite表中创建新记录时,我会通过RESTful API将该更改推送到我的远程服务。我遇到的问题是如何订购主键以便数据中没有冲突(即手机中的记录与主键具有相同的主键在服务器上完全不同的记录)。 在客户端上引用记录以及在服务器上引用相同记录的常用"最佳做法是什么?

3 个答案:

答案 0 :(得分:1)

您可以为主键使用GUID类型的列。 SQL Server支持类型UNIQUEIDENTIFIER据我所知,SQLite支持类型GUID(否则您的手机上的客户端应用程序必须生成GUID值)。这应该保证客户端和服务器上的唯一值。

答案 1 :(得分:1)

GUID是一个不错的选择但不是很有意义。 你可以发送设备ID +递增的身份值和/或时间

,这将是很好的

通过查看记录,您可以确定它来自哪个设备以及它们发生的顺序。

根据您的应用程序,这可能是非常有用的信息。

答案 2 :(得分:1)

根据我的偏好,几乎没有选择。如果这些不适用于您的情况,请随意在评论中澄清:

  • 识别自然键,或者如果不存在,则创建一个唯一标识本地数据属性的人工键。请注意,人工密钥与代理as explained here不同。使用此选项可以使用唯一的设备ID创建复合主键

  • 使用SQLite ROWID(代理键)和唯一的设备ID作为复合主键

  • 为每行使用全局唯一标识符,请注意记录的潜在陷阱here