Ответ 1
Прежде всего, убедитесь, что в столбцах ID
и short_url_code
есть ограничения на единство.
Когда кто-то создает новую ссылку:
- Получите следующую большую ссылку
ID
из базы данных ( по соображениям производительности, вы действительно должны ДЕЙСТВИТЕЛЬНО использоватьautoincrement
илиSEQUENCE
, в зависимости от того, что предлагает ваша СУБД, в противном случае выберите и выберитеMAX(ID)+1
) - Создайте короткий URL-адрес (
http://website.com/[short url name]
) изID
с помощьюbase64_encode
или любой другой стандартной или стандартной схемы кодирования - Вставить в таблицу
links
:ID, short_url_code, destination_url
-
Если сбой вставки из-за нарушения ограничения, вернитесь к шагу 1, чтобы попробовать новый
ID
; у вас может быть нарушение, потому что:- тот же идентификатор уже использовался (т.е. вставлен) параллельно другим потоком/процессом и т.д. (это не произойдет, если вы использовали
autoincrement
илиSEQUENCE
и могут часто встречаться в противном случае) и/или - тот же
short_url_code
уже используется как пользовательский URL (это произойдет очень редко, если кто-то не пытается вызвать проблемы на вашем сайте).
- тот же идентификатор уже использовался (т.е. вставлен) параллельно другим потоком/процессом и т.д. (это не произойдет, если вы использовали
-
Если вставка выполнена успешно, скопируйте и верните короткий URL-адрес пользователю
Когда кто-то создает новую ссылку и передает собственный короткий URL-адрес:
- Выполните тот же шаг 1, что и выше.
- Вместо того, чтобы генерировать короткую часть URL из
ID
, как на шаге 2 выше, использовать пользовательскийshort_url_code
, предоставленный пользователем - Выполните тот же шаг 3, что и выше.
- Если вставка не удалась из-за:
- нарушение ограничения на
ID
: вернитесь к шагу 1, чтобы попробовать новыйID
- нарушение ограничения на
short_url_code
: вернуть пользователю ошибку, требуя, чтобы он выбрал другой настраиваемый URL-адрес, поскольку короткий URL, который он предоставил, уже был использован
- нарушение ограничения на
- Выполните тот же шаг 5, что и выше.