Фон: У меня есть таблица базы данных, называемая Контакт. Все пользователи моей системы имеют информацию об их контактах в этой таблице, включая имя, фамилию, а также поле varchar под названием «UniqueId». Пользователи системы могут помещать что-либо в поле UniqueId, если оно уникально от уникальных идентификаторов другого пользователя.Автогенерация уникального поля varchar - mySQL, Java, Hibernate
Цель: Теперь мне нужно изменить свой код, чтобы уникальный идентификатор генерировался автоматически, если пользователь его не предоставил. Это должно быть кратким и визуально приятным. В идеале это может быть просто автоинкрементный номер. Однако AUTO_INCREMENT работает для целочисленного поля, а не для поля varchar.
Также обратите внимание, что каждый контакт UniqueId должен быть уникальным от других контактов этого пользователя, но не обязательно уникальным для всей системы. Таким образом, следующие UniqueIds справедливы:
Contact
UserId Firstname Lastname UniqueId
1 Bob Jones 1
1 Harold Smith 2
2 Joe Bloggs 1
Вопрос: Итак, как я могу добиться этого? Есть ли надежный и чистый способ получить базу данных для создания уникального идентификатора для каждого контакта в существующем поле Uniquevd varchar (каковы мои предпочтения, если это возможно)? Или я вынужден заставить Java пойти и получить следующий доступный уникальный идентификатор, и если да, то какой самый надежный способ сделать это? Или любое альтернативное решение?
Редактировать - 11 апреля AM: Мы используем спящий режим для отображения наших полей. Я только начинаю исследовать, может ли это предложить альтернативное решение? Любые мнения?
Редактировать - 11 апреля PM: 2 варианта в настоящее время выделяются, но не кажутся такими идеальными, как хотелось бы.
1. Поскольку @eis предлагает, у меня могло бы быть поле с добавлением auto-incrementing в дополнение к моему текущему поле varchar. Затем, когда сохраняется контакт, int также может быть сохранен в поле varchar, или когда контакт получен, int может использоваться, если varchar пуст. Но кажется бесполезным и неправильным использовать два поля, а не один
2. Я изучаю использование спящего генератора, как обсуждалось here. Но это включает в себя проведение подсчета в другом месте следующего идентификатора и кода Java и, похоже, в значительной степени затрудняет процесс.
Если мое существующее поле uniqueId было полем int, AUTO_INCREMENT будет просто работать и работать красиво. Невозможно ли создать базу данных для создания этой базы данных, но сохранить ее как строку?
um. поэтому uniqueid уникален только для других контактов этого пользователя. так что происходит, когда два пользователя, которые не использовали контакты, и выбрали тот же уникальный, свяжитесь друг с другом? – eis
У пользователя много контактов, с которыми он общается. Другими словами, это его собственная адресная книга контактов. Пользователь никогда не общается с другим пользователем, и контакт никогда не обменивается данными с другим контактом. Отвечает ли это на ваш вопрос? –
Да. Но я не думаю, что даже если ваше поле будет int, что AUTO_INCREMENT будет работать, так как он всегда может столкнуться с чем-то, что есть у другого пользователя. Автообключения не делают никаких проверок. – eis