• Хорошая ли идея использовать в качестве ID (первичного ключа) мд5 хеш?

    Если «Мд5 строить все равно придется», он будет заведомо уникальным (то есть логика не допускает добавления двух картинок с одним хэшем), то почему нет (при условии что индексы и основной, и связанных таблиц будут помещаться в памяти, если важно быстродействие). В любом случае, насколько я понимаю, хэш будет считаться только при попытке добавления картинки в базу, а количество выборок по ид будет много больше числа таких попыток.

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

    Плюс, если я правильно понял идею (что-то вроде фотохостинга, хэш картинки используется для урлов) могут быть интересные ситуации типа: один пользователь добавил картинку, получил её новый урл, потом второй добавил её же, система засекла дубликат и выдала уже существующий хэш. Затем первый пользователь удалил картинку, система засекла, что есть ещё ссылки и удалила только ссылку из альбомов первого пользователя, не удаляя саму картинку — в итоге первый пользователь может увидеть, что несмотря на удаление картинка осталась доступна по старому урлу. Кому-то может всё равно, а кто-то может поднять крик про личные данные и т. п.
    Ответ написан
    1 комментарий
  • Хорошая ли идея использовать в качестве ID (первичного ключа) мд5 хеш?

    Zorkus
    @Zorkus
    Просто вот это — дырками после удалений (если использовать просто инкремент айди) — а в чем тут проблема? Ну будут дырки и будут. Это же суррогатные ключи.

    Да, если уйти глубоко в стек, можно поговорить по clustering factor на индексах и прочем ;) но это уже мелочи.
    Повторю, я бы использовал внутри СУБД именно этот подход.
    Ответ написан
    Комментировать
  • Хорошая ли идея использовать в качестве ID (первичного ключа) мд5 хеш?

    shushu
    @shushu
    Не очень хорошая идея. Инт всегда лучше для примари поля.
    Я бы использовал int( или bigint) с автоинкрементоv, для внутренних целей, а наружу уже передавал бы md5, предварительно записанный в эту же таблицу отдельным полем, либо md5(id+salt)
    Ответ написан
    2 комментария