Да на все ваши вопросы. Я согласен с вашими утверждениями о том, что « следует предоставить веб-приложению какую-то другую ценность, которую можно преобразовать обратно в первичный ключ »
В противном случае вы можете открыть себя для потенциальных проблем.
Редактировать
Относительно комментария о том, что " нет причин применять штрафной удар по тривиальным ключам. Посмотрите в URL вашего браузера прямо сейчас, держу пари, вы видите ключ! ".
Я понимаю, что вы говорите, и да, я вижу ключ в SO URL и согласен, что он, вероятно, относится к базе данных PK. Я допускаю, что в таких случаях это нормально, если нет лучшей альтернативы.
Я бы все же предпочел показать что-то иное, чем ПК - что-то с семантической ценностью. Название вопроса также содержится в URL-адресе, но, поскольку это будет трудно определить как уникальное (или передавать между пользователями устно), его нельзя надежно использовать само по себе.
Однако при просмотре URL-адресов «тегов» (т. Е. https://stackoverflow.com/questions/tagged/java+j2ee), PK не отображаются, и вместо них используются имена тегов. Лично я предпочитаю такой подход и стремлюсь к этому.
Я также хотел добавить, что данные, на которые указывает ПК, могут со временем меняться. Я работал над системой, в которой таблица была заполнена информацией из автономного процесса - то есть ежемесячной статистики, когда содержимое таблицы БД в конце месяца уменьшалось и заполнялось новыми данными.
Если данные будут добавлены в БД в другом порядке, PK для определенных точек данных изменится, и любые сохраненные закладки из предыдущего месяца для этих данных теперь будут указывать на другой набор данных.
Это один случай, когда раскрытие PK "сломало бы" приложение, не связанное с безопасностью приложения. Не так с сгенерированным ключом.