Автоинкремент первичного ключа SQL против метки времени - PullRequest
2 голосов
/ 18 января 2012

Premesis:

Я знаю, что лучший способ использовать первичный ключ - это установить поле как целое число (автоинкремент или нет) из-за индексов, но я вособая ситуация ...

У меня есть программа, которая работает в автономном режиме (на ПК и планшете), используя sqlite в качестве базы данных.Пользователь может синхронизировать данные между программой и центральным сервером (например, облаком).Когда пользователь синхронизирует данные, все локальные поля обновления обновляются на сервере и наоборот.

Использование автоинкремента первичного ключа в этой ситуации является плохим решением, поскольку, если два пользователя добавляют поле в таблицу (на двухдругое устройство) У меня будет дублирован первичный ключ ..

Затем я добавил еще одно поле, содержащее идентификатор пользователя, поэтому у меня есть индекс, образованный: USER_ID и FIELD_ID таким образом, ситуацияизменить, но все еще могут быть проблемы ...

1) У меня не может быть FIELD_ID как AUTO_INCREMENT 2) Описанная выше проблема все еще остается, если у пользователя Пола есть два устройства с одинаковой версией базы данных (синхронизированов то же время) и в устройстве 1 он выполняет вставку в table_AAA и выполняет другую вставку в table_AAA, но из устройства 2 у меня будет дубликат индекса (USER_ID / FIELD_ID)

Поэтому я преобразовалFIELD_ID как varchar (17), составленный из YYYYMMDDHHMMSSmmm, этот способ довольно невозможен, если пользователь выполняет две операции в одну и ту же миллисекунду..

Вопрос:

Есть ли лучший способ установить первичный ключ в моей ситуации ???

Ответы [ 2 ]

2 голосов
/ 18 января 2012

Создайте второе, уникальное поле, гид.Вы получаете быстрое индексирование для регулярного использования и уникальность для слияния.

1 голос
/ 18 января 2012

Вероятно, вы должны иметь UUID в качестве первичного ключа, для большей ясности вы можете добавить поле device_id для различения строк, хотя UUID должно быть достаточно.UUID s результаты возрастают, то есть фрагментация данных таблицы не должна вас сильно беспокоить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...