@MainMaster

Генерация коротких уникальных ключей в mysql как реализовать?

Здравствуйте у меня есть такая таблица в базе данных
CREATE TABLE links (
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
url VARCHAR(2048) NOT NULL,
short_key VARCHAR(10) NOT NULL
);


Я хочу отказаться от поля id и взамен него использовать short_key которая по смыслу будет играть ту же роль.
short_key это регистрозависимое поле оно должно быть PRIMARY KEY при этом при вставке оно должно автоматически
генерироваться с длиной строки от 1 до 10 знаков в состав которых входят только буквы латиницы.

Можете подсказать как сделать что бы short_key генерировался автоматически с проверкой на уникальность по приведенным выше критериям?

UPDATE: Забыл сказать что цель short_key нужен для того что бы хитрозадые пользователи не могли перебрать все записи по id меняя id в ссылке.
Заранее спасибо за уделенное время!
  • Вопрос задан
  • 972 просмотра
Решения вопроса 2
Adamos
@Adamos
Оставьте в покое базу данных. Она в этой задаче вообще ни при чем.
Вам нужно всего лишь обратимое шифрование по ключу вашего ID - так, чтобы пользователь видел зашифрованную строку, а вы из нее могли получить ID обратно. Вот и все.

P.S. Впрочем, для такой цели и особого шифрования не требуется. Собирать строку {N1}{N2}{N3}, где N1 и N2 - случайные числа заданной длины, а N3 = (N1 * N2 + ID) XOR C - вот и готовый short_key, из которого обратно получаем ID = (N3 XOR C) - (N1 * N2)
Ответ написан
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
Или генерировать случайное значение в скрипте и вставлять, или через хранимые процедуры

PS Дополнительно скажу что отказываться от автоинкрементного primary без веских аргументов явно не стоит.

PPS Генерировать short_key можно например получая id и преобразуя его из десятичной системы счисления в какую-нибудь NNричную.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
petermzg
@petermzg
Самый лучший программист
Так как у вас цель "нужен для того что бы хитрозадые пользователи не могли перебрать все записи по id меняя id в ссылке."
Оставьте ID как AUTOINCREMENT INTEGER и добавьте просто еще одно поле с "солью", для примера типа char(3), куда при вставке и сохраняйте случайное строковое значение.
Когда у вас будет генерироваться URL, то делайте его по шаблону ID + "-" + SALT, что поможет достигнуть нужной цели.
Ответ написан
@PavelFokeev
pavl1k.ru
SQL не умеет генерировать уникальные строки. Генерируйте с помощью php: unique();
Ответ написан
Комментировать
@d-stream
Готовые решения - не подаю, но...
UUID() - сильно длинный?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы