Premesis:
我知道使用主键的最佳方法是将字段设置为整数(自动增量或不是因为索引),但我处于特定情况......
我有一个程序可以使用sqlite作为数据库离线(在PC和平板电脑上)。 用户可以在程序和中央服务器之间同步数据(如云)。 当用户同步数据时,所有本地更新字段都在服务器上更新,反之亦然。
在这种情况下使用主键自动增量是一个糟糕的解决方案,因为如果两个用户在表中添加一个字段(在两个不同的设备上),我将重复主键..
然后我添加了另一个包含用户ID的字段,所以我有一个索引形成:
USER_ID
和FIELD_ID
这种情况会发生变化,但仍然存在问题......
1)我不能将FIELD_ID作为AUTO_INCREMENT 2)上述问题仍然存在, 如果用户Paul有两个具有相同数据库版本的设备(同时同步),并且在设备1中他在table_AAA上执行插入并且他在table_AAA上执行另一个插入但是从设备2执行,我将具有重复索引( USER_ID / FIELD_ID)
所以我将FIELD_ID转换为由YYYYMMDDHHMMSSmmm组成的varchar(17),这种方式几乎不可能是用户在同一毫秒内进行两次操作..
问题:
有没有更好的方法在我的情况下设置主键???
答案 0 :(得分:2)
创建第二个唯一字段guid。您可以获得常规使用的快速索引,以及合并的单一性。
答案 1 :(得分:1)
您可能应该使用UUID作为主键,为了添加更多清晰度,您可以添加device_id字段来区分行,但UUID
应该足够了。
顺便说一下,UUID
的结果会提升,那就是表数据碎片不应该打扰你。