我有一个理论上的问题,因为我还处于思考阶段,因此还没有代码。我想更新一个应用程序,以允许用户通过DropBox数据存储区或类似的东西与他人共享他们的数据。但是,当用户创建在设备上填充多个sqlite表的数据时,每个表都有一个自动增量整数作为主键,在其他表中用作链接数据的外键。
如果有多个用户实际创建数据并共享它,那么主键列显然会成为一个问题。如果我下载数据并将其存储在本地,我显然无法在用户2的数据表中插入用户1的键值,首先是因为自动增加,其次是因为用户2可能已经拥有未使用该键值保存的数据
我考虑过几个选项,但没有什么特别吸引人或强大的。我正在考虑创建一个UUID来识别设备,该值必须存储在每个表中,主键是该列和当前主键整数的组合,显然必须具有自动 - 增量已删除。因此,要从每个表中获取所有相关数据,必须使用id列和UUID列。
我觉得必须有更强大的方法来实现这一点,任何人都有更好的建议吗?
答案 0 :(得分:1)
如果我理解得很清楚,您需要在云中使用某种集中式数据库与本地应用进行通信,这是对的吗? 客户端永远不应该为这样的系统创建id。这些情况的通常做法是始终拥有由数据库在云中创建的远程ID,并且只要您还没有此值,就可以获得后备值(本地ID在本地创建 - 这与远程的)。
因此,为了说明我的话,我们可以设置以下示例。您的应用将消息存储在数据库中假设您使用本地ID 1,2,3创建消息。这些ID在云中的中央数据库中永远不会是唯一的。相反,您只需将它们用作本地回退。只要您将这3条消息发送到您的集中式数据库,它就会为它们提供3个新的远程ID,您将以独特的方式使用它们(即:35,46,54)。
请注意,当您有多个请求者/用户访问同一个数据库时,除非您按照解释的方法,或者您在云中数据库中提前和按需查询一定数量的唯一ID,否则无法确保唯一性。 请记住,实际情况只能由服务器中的数据库提供。