Каков наилучший способ хранения уникального URL Slug? - PullRequest
6 голосов
/ 12 января 2009

Я пытаюсь сгенерировать url 'slugs' для моего сайта. Он основан на одном фрагменте сгенерированного пользователем текста.

Теперь я создал свой собственный метод слагов, поэтому мне не нужен какой-то код для этого.

Что мне интересно, так это где лучше всего определить, является ли этот слаг уникальным, а затем вставить его, потому что поле слага является индексом уникального ключа.

Изначально у меня был триггер на любой вставке (против таблицы), поэтому при вводе данных определяется слаг. У меня была функция, которая проверяла количество записей, содержащих текст пользователя (не слаг), а затем генерировала слаг и добавляла количество записей + 1 в конец нового слага.

например.

В таблице найдено 5 записей с одинаковым содержимым, созданным пользователем. слаг для этого теперь слаг-текст с добавленной в конце цифрой 6.

Недостатки: если пользователь изменяет свой текст, слаг не меняется.

В любом случае, мне интересно, не сталкивались ли другие люди с этой проблемой ранее и не нашли ли способы ее исправить?

Ответы [ 3 ]

16 голосов
/ 12 января 2009

Мне нравится, как это делает stackoverflow. Который должен поместить и идентификатор и слизняк в URL. Теперь пуля больше не должна быть уникальной. Я верю, что hulu.com делает то же самое. Я думаю, что это практическое решение проблемы.

3 голосов
/ 12 января 2009

Большинство сайтов не изменяют слаг по той причине, что если пользователь редактирует свой заголовок, он не должен разрывать ссылки на уже созданную запись.

0 голосов
/ 12 января 2009

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

Для альтернативного решения вы можете использовать карту [загруженную при запуске, содержащую существующие слагы], которая содержит ключ как слаг и существующее количество как значение. Каждый раз, когда вы генерируете слаг, определите существующее значение и добавьте значение, превышающее его, в таблицу, а затем обновите карту.

...