Можно ли генерировать случайную строку и использовать ее в качестве идентификатора в реляционной базе данных

#python #mysql

#python #mysql

Вопрос:

Я использую MYSQL для хранения данных о своих продуктах, я читал в Интернете, что использование автоинкрементного числа в качестве первичного ключа — действительно плохая идея, потому что любой может просто выполнить итерацию по всему моему сервису и украсть мои данные. Для практических предложений это действительно удобно, теперь я пытаюсь найти лучшее решение,

До сих пор я создал функцию в Python, которая возвращает случайную строку длиной n из фиксированного количества символов на выбор. Теперь я знаю, что, возможно, сгенерированный идентификатор уже был сгенерирован ранее и сохранен в БД, и вероятность того, что это произойдет, вначале действительно мала, но она будет увеличиваться со временем, в момент, когда, скажем, половина идентификаторов уже взята, поэтому вероятность сбоя при создании новой записи в БД будет уменьшена.сбой составит 50%.

Можно ли работать с идентификаторами таким образом? или есть какое-либо лучшее решение?, сколько символов я должен использовать, по крайней мере, чтобы избежать этой проблемы ?.

Я знаю, что UUID существует, но я не думаю, что он очень удобен для пользователя

Комментарии:

1. Есть ли у продуктов идентификатор; серийный номер? Имеют ли транзакции с этими продуктами идентификационный номер (т.Е. квитанцию, сгенерированную из POS и т. Д.)?

2. С кем ты пытаешься подружиться? Я использовал UUID в качестве первичных ключей, но это я.

3. Вы путаете хранение и извлечение данных с отображением данных. Нет никакого вреда в том, чтобы иметь первичный ключ AI. Просто не позволяйте этому быть тем, с чем пользователи ищут.

4. Никакие случайные строки никогда не будут удобными для пользователя, если они не короткие и их можно использовать повторно, например, код бронирования авиабилетов.

5. потому что любой мог просто выполнить итерацию по всему моему сервису и украсть мои данные. Почему у этого «любого» есть доступ к вашим данным?