Стоит ли при добавлении записи с уникальным хешем в базу проверять наличие дубликатов?
Возьмем пример.
В одной безымянной таблице бд есть поле hash, содержащее уникальный набор символов, генерируемый для каждой записи автоматически перед ее добавлением в базу. Стоит ли перед добавлением записи проверять наличие записей с таким же хешем? Если да, то каким образом? Циклом while? Стоит ли того этот 0,0000000000001% шанс?
Если вообще эту ситуацию (совпадение) обрабатывать, то лучше сделать этому полю ограничение unique, и если при добавлении записи происходит ошибка, пробовать другой хеш.
@0neS Ну так если поле уже unique, при вставке записи получите ошибку или исключение (в зависимости от используемой библиотеки для доступа к БД). Если ошибка - генерируете новый хеш. Всего-то делов.
Впрочем это не вполне правильное решение: в случае, если ошибка возникает по какой-то другой причине, цикл будет исполняться вечно (пока его процесс не будет убит из-за лимита времени). В общем: -1) установить счетчик попыток в 0, 0) сгенерировать хеш 1) попробовать вставить запись, 2) если в этот момент произошла ошибка (вернулся false, или affected rows = 0, или исключение, или черт лысый), проверить счетчик попыток: если равен 3, сказать пользователю что ошибка, если меньше 3, увеличить на 1 и перейти к шагу 0) - думаю такой алгоритм сами напишете в коде.
@0neS Что ж в нем неправильного? Пусть совпадение хешей и очень маловероятно, но я думаю что написать несколько строчек кода, чтобы управлять этой ситуацией, не составляет особого труда. Уж совсем маловероятно, если три раза подряд попадется уже занятый хеш, но тогда хоть пользователь увидит внятное сообщение, а не будет гадать, почему это он (например) зарегистрировался (а на самом деле запись не была создана), но зайти не может.