Поддержание ссылочной целостности между мобильным клиентом и сервером - PullRequest
0 голосов
/ 31 января 2012

Итак, у меня относительно простая система.Мобильный клиент создает записи в базе данных sqlite, которые я хотел бы синхронизировать с удаленным сервером SQL (который используется совместно с другими мобильными клиентами) .Поэтому, когда я создаю новую запись в таблице sqlite телефона, я затем отправляю это изменение в свою удаленную службу через RESTful API.Проблема, с которой я столкнулся, заключается в , как мне упорядочить первичные ключи, чтобы в данных не было коллизий (т. Е. Запись в телефоне имеет тот же первичный ключ, что и совершенно другая запись насервер). Какова обычная «лучшая практика для ссылки на запись на клиенте и для ссылки на ту же запись на сервере?

Ответы [ 3 ]

1 голос
/ 01 февраля 2012

GUID - хороший выбор, но не очень значимый.Было бы неплохо, чтобы вы могли отправить идентификатор устройства + увеличивающееся значение идентификатора и / или время

Таким образом, просматривая записи, вы могли определить, с какого устройства оно пришло, и последовательность, с которой они произошли.

В зависимости от вашего приложения это может быть очень полезной информацией.

1 голос
/ 01 февраля 2012

Несколько вариантов, в порядке моих предпочтений. Не стесняйтесь уточнить в комментариях, если это не сработает для вашей ситуации:

  • Идентифицируйте естественный ключ или, если он не существует, создайте искусственный ключ, который уникальным образом идентифицирует локальные атрибуты данных. Обратите внимание, что искусственный ключ отличается от суррогата , как описано здесь . Используйте это с уникальным идентификатором устройства для создания составного первичного ключа

  • Используйте SQLite ROWID (суррогатный ключ) и уникальный идентификатор устройства в качестве составного первичного ключа

  • Используйте глобальный уникальный идентификатор для каждой строки, остерегайтесь возможных ошибок, задокументированных здесь

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

Вы можете использовать тип GUID столбца для первичного ключа. Насколько мне известно, SQL Server поддерживает тип UNIQUEIDENTIFIER SQLite поддерживает тип GUID (в противном случае ваше клиентское приложение на телефоне должно выдавать значение GUID). Это должно гарантировать уникальные значения на клиенте и сервере.

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