Реализация красивых адресов сайта обычно выглядит так: добавляем в таблицу уникальное поле
path, которое будет хранить валидный адрес, а потом делаем по нему выборку.
Минусы очевидны:
1)
SELECT по текстовому полю.
2) В случае нескольких баз данных мы не можем предположить какая из них содержит нужную нам запись.
3) Дополнительное идентификационное поле в то время, как уже есть основное, обычно,
ID.
Избавляемся от минусов одним выстрелом и находим другие.
Оставляем только
ID. А как же красивые адреса? Используем конвертацию в другую систему счисления. В принципе, достаточно тридцатишестиричной (36) системы счисления, которая содержит строчные буквы латинского и цифры.
Тогда:
0 = 0
z = 35
news = 1092412
about = 17341589
По-моему, здорово. Такое уже есть в сокращалках ссылок.
Ограничение — это максимальное числовое значение. Для
UNSIGNED BIGINT в
MySQL это
18446744073709551615, что также является
UNSIGNED INT64 в нормальных языках программирования.
Отдельно отмечу, что
PHP безразлично относится к точности чисел о чем и сообщают в документации, так что трогать его не надо:
Еще одно замечание, которое впрочем лишь косвенно относится к теме. После ручной вставки числового
ID в поле с
AUTO_INCREMENT, тот будет уже следовать за этим числом, какое большое бы оно не было, так как изменять его можно только на большее, но не меньшее.
Комментарии (4)
RSS свернуть / развернутьА из минусов: 1) тоже можно индекс делать 2) можно свои правила ввести, например всё что начинается с первой буквы а-j в базе1, а другое в базе2 :) 3) поле id в любом случае делаю, для orm и т.п. чтобы не переназначать primary key
Кстати, если выбран такой путь, почему бы не сделать это поле varchar(128) например с индексом и не хранить просто адрес sha1($url), без иных перекодировок, разница в скорости выборке будет ну просто не ощутимая :)
MpaK
akhmetov
Хотя каюсь, я вот тут одну фигнюшку писал от свободного времени wiki.mrak7.com так тоже пути храню сразу материализованные, так как обычно переносов тут не бывает страниц из вложенности. Гык и извратно местами делаю select с регулярным выражением. УжасЪ :)
MpaK
akhmetov
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.