Идентификаторы: счетчики или уникальные строки

12.11.2007

Вступление

Итак. Любая система имеет дело с некоторыми объектами. И чаще всего эти объекты принадлежат к одному классу и подлежат идентификации – то есть способу, согласно которому мы отличаем один от другого, пускай даже очень на него похожего.

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

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

Счетчики


Сам термин “счетчик” я помню со времен MS Access, когда там при создании таблицы обязательно нужно было указать такое поле. В той же MySQL это поле называется auto_increment. В оракле свои заморочки.

К плюсам такого подхода можно отнести:

  • Скорость работы – генерация числа на единицу отличающегося от предыдущего в реальности занимает очень мало времени.
  • Простота – программисту вообще не надо знать в какой момент и по каким алгоритмам это генерируется, главное знать имя ключевого поля и правильно использовать его в выражении WHERE.

Среди минусов я бы выделил основной:

  • Раскрытие системы – возможно слово не совсем верное, но я хочу этим сказать, что изменяя идентификаторы или просто зная их порядок можно вычислить вполне интересные, пусть и не сильно секретные вещи. Например, если заказ домена у моего регистратора имеет номер 8415 я могу примерно оценить их общую прибыль, а заказывая домены с неким периодом – оценить сколько вообще людей пользуется их услугами, поток клиентов, так сказать. Или же при нумерации статей на сайте я могу оценить общий объем статей и то – сколько же труда они вложили в свой сайт, а иногда получить доступ к статьям, на которые в принципе нет ссылок, но вот правильно подобранный идентификатор решает эту проблему.

Уникальные строки


Самый яркий пример – видео на том же ютубе (взял первое попавшееся):
http://www.youtube.com/watch?v=yU194eE5jV4

Налицо отсутствие числовой последовательности и странная циферка – ничего и никому не говорящая.

Минусы и плюсы рассказывать не буду – все противоположно таковым же в предыдущем разделе. Ничего нового. Но вот про один плюс я думаю стоит рассказать подробнее. А заключается он в возможности передавать дополнительную информацию об объекте, создавая как бы составной ключ. Это конечно не составной ключ в чистом виде, но вот взять, например, один из обменников электронной валюты (реклама? нет конечно, просто пользовался несколько раз, потому и могу смело ссылку ставить), то ссылка на просмотр состояния обмена имеет такой вид:

http://megaexchange.ru/state_exchange.php?id=XXXXX-XXXXX-XXXXX-XXXXX-XXXXX

Спрашивается – а зачем так делать. Ну во-первых красиво, прямо как GUID в Windows: много буковок и ничего не понятно. Но если серьезно, то по идее можно вместе с указателем на объект передавать еще много чего полезного. Например, в случае CMS в такой ссылке можно передавать выбранный пользователем шаблон, настройки вывода отличные от стандартных или хранить состояние сессии. Вариантов – очень много, все зависит от потребностей.

Вот собственно и все мысли по поводу уникальных строк и счетчиков. Я не знаю кто победил. Мне лично проще использовать числовые последовательности, привык. А вот серьезные корпоративные сайты как я заметил – чаще используют строки. Видимо это еще и показатель престижа.


Комментирование этой статьи закрыто

Комментарии [1]

  1. Ноя 13, 17:01 , Weider

    GUID рулит, или его интертрепации более или менее развитые

Комментирование этой статьи закрыто

Кто я


Возраст: 23
Профессия: заяц


Категории


Полезные ссылки


Стишок

Зайчик-зайчик, скок-поскок!
Н-нна тебе дробину в бок!
Не с капустой же мы будем
Жрать на Новый год пирог...

eu-shestakov.livejournal.com