Premesis:SQL первичного ключа автоинкремент против временной метки
Я знаю, что лучший способ использовать первичный ключ, чтобы установить поле в виде целого числа (Autoincrement или нет) в связи с индексами, но я в конкретная ситуация ...
У меня есть программа, которая работает в автономном режиме (как на ПК, так и на планшете), используя sqlite в качестве базы данных. Пользователь может синхронизировать данные между программой и центральным сервером (например, облаком). Когда пользователь синхронизирует данные, все локальное поле обновления обновляется на сервере и наоборот.
Использование первичного ключа автоинкрементного в этой ситуации является плохим решением, потому что, если два пользователя добавить поле в таблице (на двух разных устройств), я буду иметь первичный ключ дублируется ..
Затем я добавил еще поле, которое содержит идентификатор пользователя, так что я индекс, образованный: USER_ID
и FIELD_ID
таким образом изменения ситуации, но все еще могут быть проблемы ...
1) Я не могу иметь FIELD_ID, как AUTO_INCREMENT 2) Проблема, описанная выше, остается, , если пользователь Павел имеет два устройства с одинаковыми да tabase (одновременно синхронизируется), а в устройстве 1 он делает вставку на table_AAA, и он делает другую вставку на table_AAA, но из устройства 2 у меня будет двойной индекс (USER_ID/FIELD_ID)
Итак, я преобразовал FIELD_ID как VARCHAR (17), составленной YYYYMMDDHHMMSSmmm, таким образом, довольно невозможно, что пользователь делает две операции в одной и той же миллисекунды ..
Вопрос:
есть ли лучший способ установить первичный ключ в моей ситуации ???
просто мысль, вы говорите, что это «очень невозможно», что два обновления сделаны за одну и ту же миллисекунду, но что, если системное время изменилось? –
Почему нет сложного первичного ключа для вас? (user_id, device_id, field_id)? Это не только дает уникальность, но также определяет места, где были созданы данные. Независимо от того, что вы делаете, не стесняйтесь использовать временную метку по любой причине ***, кроме *** как уникальный идентификатор. Вы * в конечном итоге столкнетесь. – MatBailie
как я могу получить идентификатор поля? – Marcx