Сохранение идентификатора id на стороне клиента и на стороне сервера - PullRequest
1 голос
/ 06 октября 2010

Я часами чищу голову, чтобы решить следующую ситуацию:

Несколько HTML-форм на веб-странице идентифицируются по идентификатору.Пользователи могут создавать формы на стороне клиента и заполнять данные.Как я могу гарантировать, что идентификатор формы, сгенерированной пользователем, является уникальным и что в процессе сохранения не произошло никакого коллизии, поскольку этот же идентификатор был сгенерирован клиентом другого пользователя.

Проблемы/ questions:

  • Случайная функция на стороне клиента может возвращать идентичные идентификаторы на двух клиентах
  • Просмотр таблицы SQL для свободного идентификатора не решит проблему
  • Автоинкремент нового идентификатора усложнит весь процесс, потому что идентификатор DOM и идентификатор SQL отличаются, поэтому мы подходим к следующему пункту:
  • «левое соединение» для объединения dom_id и user_id для идентификации форм в базе данныхвыглядит как убийца производительности, потому что я ожидаю, что эти таблицы будут огромными

Вопрос (сформированный настолько просто, насколько я могу):

Есть ли способ, которымклиент может создать / получить уникальный идентификатор, который позже будет использоваться в качестве первичного ключа для записи в базе данных без каких-либо коллизий?Какова лучшая практика?

Мое текущее решение (плохое):

Нет уникальных идентификаторов для идентификации форм.Всегда комбинация через левое соединение для идентификации форм, созданных конкретным пользователем.Но что произойдет, если пользователь скажет: удалите мою учетную запись (и мой user_id), но оставьте данные на сервере.Я бы потерял идентификатор пользователя, и этот запрос больше не мог работать ...

Мне очень жаль, что я не смог объяснить это по-другому.Но я надеюсь, что кто-то понял, с чем я столкнулся, и мог бы дать мне хотя бы подсказку

СПАСИБО ОЧЕНЬ МНОГО!

Ответы [ 2 ]

2 голосов
/ 06 октября 2010

GUID (глобально уникальные идентификаторы) могут помочь.См. http://en.wikipedia.org/wiki/GUID

Для каждой формы клиент может сгенерировать новый GUID.Теоретически он должен быть уникальным.

0 голосов
/ 06 октября 2010

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

CREATE TABLE sequence (id integer default 0, sequencename varchar(32));

Приращение:

UPDATE sequence 
SET id = @generated := id + 1 
WHERE sequencename = 'yoursequencename';

Начало:

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