0

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

4

3 回答 3

1

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

于 2012-01-31T19:50:41.817 回答
1

GUID 是一个不错的选择,但意义不大。你可以发送一个设备 ID + 一个递增的身份值和/或一个时间,那就太好了

这样,通过查看记录,您可以识别它来自什么设备以及它们发生的顺序。

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

于 2012-01-31T20:00:34.143 回答
1

几个选项,按我的喜好排列。如果这些不适用于您的情况,请随时在评论中澄清:

  • 识别一个自然键,或者如果一个不存在,则创建一个唯一标识本地数据属性的人工键。请注意,人工密钥不同于此处解释的代理项。将其与唯一的设备 ID 一起使用来创建复合主键

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

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

于 2012-01-31T20:29:40.197 回答