Создание уникального первичного ключа и сохранение его как Int или Bigint [дубликат]MySql

Форум по Mysql
Anonymous
Создание уникального первичного ключа и сохранение его как Int или Bigint [дубликат]

Сообщение Anonymous »

В приложении мы создаем уникальный идентификатор пользователя из 10 цифр следующим образом.

Код: Выделить всё

function random_number($length) { // Creates random number
$original_string = array_merge(range(0,11));
$original_string = implode("", $original_string);
return substr(str_shuffle($original_string), 0, $length);
}

function unique_user_id() {   //Check if number is unique from database
$user_id = random_number(10);
$query = "Select count(*) from users where user_id=?";
...
if($row[0] !=0) { unique_user_id();}
else {return $user_id;}
}

Этот 10-значный идентификатор пользователя может быть сохранен как Int или Bigint. Это три возможных сценария.
  • Сохранение идентификатора пользователя как Int(10): Проблема сохранения 10-значного идентификатора пользователя как Int — его максимальный диапазон 2147483647. . Если указанная выше функция генерирует уникальный идентификатор 9999999999, то он не будет сохранен в таблице.
  • Сохраните идентификатор пользователя как Int(9): Максимальное сгенерированное число может храниться до 999999999. Однако приведенной выше функции придется несколько раз выполнять поиск в таблице, чтобы убедиться, что это число уникально.
  • Сохранить идентификатор пользователя как Bigint(10): это решит проблему хранения уникального номера. Но возникает проблема из-за производительности Bigint по сравнению с Int в качестве первичного ключа.
Пожалуйста, предложите, подходит ли подход к созданию уникальных идентификатор пользователя в порядке. Как лучше всего хранить этот 10-значный идентификатор пользователя. Спасибо.

Подробнее здесь: https://stackoverflow.com/questions/793 ... -or-bigint

Вернуться в «MySql»