0

我有一个理论问题,还没有代码,因为我还只是在思考阶段。我想更新一个应用程序以允许用户通过 DropBox Datastore 或类似的方式与他人共享他们的数据。但是,当用户创建的数据填充到设备上的多个 sqlite 表中时,每个表都有一个自动增量整数作为主键,在其他表中用作外键以链接数据。

如果有多个用户实际创建数据并共享它,那么主键列显然会成为一个问题。如果我下载数据并将其存储在本地,我显然无法在用户 2 的数据表中插入用户 1 的键值,首先是因为自动增量,其次是因为用户 2 可能已经有未共享的数据与该键值一起保存.

我已经考虑了一些选择,但没有什么特别吸引人或强大的。我正在考虑创建一个 UUID 来识别设备,该值必须存储在每个表中,主键将是该列和当前主键整数的组合,显然必须具有自动删除了增量。因此,要从每个表中获取所有相关数据,都必须使用 id 列和 UUID 列。

我觉得必须有一种更强大的方法来实现这一点,有人有更好的建议吗?

4

1 回答 1

1

如果我理解得很好,您需要云中的某种集中式数据库来与您的本地应用程序进行通信,对吗?客户端永远不应该为这样的系统创建 id。在这些情况下,通常的做法是始终拥有一个由您的数据库在云中创建的远程 ID,并且当您还没有此值时,您可以拥有一个后备值(本地创建的本地 ID - 这与远程的)。

因此,为了说明我的话,我们可以设置以下示例。您的应用程序将消息存储在数据库中。假设您创建本地 ID 为 1、2、3 的消息。这些 id 在云中的中央数据库中永远不会是唯一的。相反,您只需将它们用作本地后备。一旦您可以将这 3 条消息发送到您的集中式数据库,它就会为它们提供 3 个新的远程 ID,您将用于独特的方式(即:35、46、54)。

请注意,当您有多个请求者/用户访问同一个数据库时,除非您遵循解释的方法,或者您提前并根据需要向云中的数据库查询一定数量的唯一 ID,否则无法确保唯一性。请记住,实际情况只能由服务器中的数据库提供。

于 2013-10-31T15:37:47.457 回答