【问题标题】:Maintaining referential integrity between a mobile client and a server维护移动客户端和服务器之间的引用完整性
【发布时间】:2012-01-31 19:45:52
【问题描述】:

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

【问题讨论】:

  • 总体思路是,客户端充当 Web 服务器的缓存,在客户端中创建更改,然后推送到 Web 服务器

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

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

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

      • 为每一行使用一个全局唯一标识符,谨防记录在案的潜在陷阱here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-12
        • 1970-01-01
        • 2011-02-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多