LINUX.ORG.RU

id или name?


0

0

Ситуация такая: есть база данных в которой хранятся записи о документах. Каждый документ, кроме прочих полей, имеет уникальный номер (id) и уникальное имя (name). Пользователь может оперировать с этими документами. Вопрос: что следует использовать для отправки клиенту (например, при выборе документа, его редактировании) в скрытых полях - id или name?

В первом случае имеем раскрытие внутренней структуры базы, а во втором - тормоза на запросах в базу - по name нужно будет находить id.

Что посоветуете?

Чем так плохо «раскрытие внутренней структуры базы»?

Deleted
()

>В первом случае имеем раскрытие внутренней структуры базы

нет, если ломанут базу, то скрытие тебе ничем не поможет, а "снаружи"... ну номер и номер, и что с этого?

Pi ★★★★★
()

>В первом случае имеем раскрытие внутренней структуры базы

номер ничего не раскрывает, если параноиш - можно делать id + salt
ну а на сервере id - salt

;-)

Effect
()

В некоторых проектах я делал так:

Для обеспечения читабельных URI применял имя. Учитывая древовидную структуру сайта, имя (URI) есть уникальным в пределах одного уровня определенной ветки, тоесть в другой ветке может присутствовать такое-же имя. Для ускорения поиска по таблице и защиты от SQL иньекций, полученный URI превращается в crc32 и по соответствующему полю в базе name_crc32 ищется нужная запись. При этом поле name_crc32 есть bigint.

Думаю crc32 хватит для одного каталога, я о колизиях.... :)

Defence
()
Ответ на: комментарий от boombick

>И какой тогда смысл в salt? Вообще, зачем он тут нужен?
ну разве, что пользователю не будет известно какой айди в базе.

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

Effect
()
Ответ на: комментарий от generatorglukoff

>А в чем тогда смысл таких длинных URL в википедии?
в википедии это сделано для SEO:

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

второе - удобство давать ссылку

например - http://en.wikipedia.org/wiki/Linux
сразу понятно о чем там будет речь.

также по ссылке сразу можно понять язык статьи.

Effect
()
Ответ на: комментарий от Effect

> второе - удобство давать ссылку

Ага, особенно удобно давать ссылки на русскоязычные статьи. Когда из поля запроса браузера копируешь.

В названии документов часто встречаются недопустимые для URL символы + не-ASCII символы браузер также кодирует и смотреть в поле запроса в таких случаях бессмысленно. Да и имена длинные бывают. В общем, числовой идентификатор, мне кажется, во многих случаях удобнее.

anonymous
()
Ответ на: комментарий от anonymous

>Ага, особенно удобно давать ссылки на русскоязычные статьи. Когда из поля запроса браузера копируешь.

Браузером нормальным надо пользоваться, который строку в UTF-8 передаёт.

Tigger ★★★★★
()
Ответ на: комментарий от anonymous

Вычистить нежелательные символы просто.

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

Defence
()
Ответ на: комментарий от Defence

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

Ну и где тут удобство? Номер не намного более непонятен, зато короче.

Вот, кстати, примерчик наименования вполне реального документа: "Серия 3.503.1-81 Пролетные строения сборные железобетонные длиной 12, 15, 18, 21, 24, 33 м из балок двутаврового сечения с предварительно напрягаемой арматурой для мостов и путепроводов, расположенных на автомобильных дорогах общего пользования, на улицах и дорогах в городах. Выпуск 0-4 Материалы для проектирования пролетных строений из цельноперевозимых балок с натяжением на упоры для мостов и путепроводов, расположенных на автомобильных дорогах общего пользования".

anonymous
()
Ответ на: комментарий от anonymous

>Ага, особенно удобно давать ссылки на русскоязычные статьи. Когда из поля запроса браузера копируешь.

Браузеры надо нормальные использовать.

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

> Браузеры надо нормальные использовать

Полностью нормальных нет. Единственные приемлимые - links и Firefox.

anonymous
()
Ответ на: комментарий от KRoN73

> Что кроется под номером 2309165?

Ответ на этот вопрос примерно такой же, что и на вопрос, что кроется за "Series 3.503.1-81 bridge spans composite ferroconcrete with length 12, 15, 18, 21, 24, 33 m from the beams of double-T section with the preliminarily tensioned reinforcement for it is bridge and the overbridges, located on the motor roads of general use, on the streets and the roads in the cities. Production 0-4 materials for designing the bridge spans from the tsel'noperevozimykh beams with the tension to the supports for is bridge and the overbridges, located on the motor roads of the general use" (babelfish переводил), если его задать конечному пользователю документа. А именно - "понятия не имею".

Строитель не обязан знать английский, следовательно, для него перевод (и даже транслит) будет совершенно не информативен. В то время, как номер можно сделать информативным (номера ГОСТов и т.д. специалисты предметной области знают почти наизусть).

anonymous
()
Ответ на: комментарий от anonymous

>Ответ на этот вопрос примерно такой же

Нет. Альтернатива - в духе "id-ili-name" - вполне понятно и наглядно. У себя на форуме так и сделал. Все довольны :)

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Ты всерьез считаешь, что запихивание в URL того названия документа, которое я привел выше, ведет к повышению наглядности?

Даже в Wiki бывают имена, которые слишком длинны, чтобы быть удобными в составе URL. А в случае какого-нибудь банка документов такой подход и вовсе не применим.

anonymous
()
Ответ на: комментарий от anonymous

>Ты всерьез считаешь, что запихивание в URL того названия документа, которое я привел выше, ведет к повышению наглядности?

Ты выкопал уникальный случай и пытаешься из него выводить общее правило.

Номер - _никогда_ ничего не говорит. Имя не говорит только в некоторых случаях.

Соответственно, вариант с номером _ничем_ не лучше.

Не хочешь делать лишний запрос в БД - совмести. Оставь в имени номер, а потом - заголовок:

http://balancer.ru/society/2007/12/05/topic-58896,15--Vpechatleniya-ot-vyboro...

http://balancer.ru/tech/forum/2007/12/05/topic-58953--Media-tsentr,upravlyaem...

и т.д.

Кстати, если систему писать с головой, то всё это сохраняется в файловой системе и БД не дёргается _вообще_.

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

> Ты выкопал уникальный случай и пытаешься из него выводить общее правило

Таких "уникальных" случаев очень много. Официальные документы имеют весьма длинные имена. Я взял пример из банка документов "Типовая проектная документация". Там много документов имеют имена длиной больше 255 символов.

> Номер - _никогда_ ничего не говорит

Согласен, уникальный идентификатор объекта БД не информативен. Однако, если брать в качестве идентификатора, к примеру, номер документа (у официальных документов это обязательный атрибут), то можно добиться большей информативности. Для конечного пользователя такая идентификация будет полезнее идентификации по именам (38-ФЗ понятно любому юристу, а 12.1.004—91 - любому, имеющему отношение к пожарной безопасности или проектированию сооружений).

> Соответственно, вариант с номером _ничем_ не лучше

Вариант с номером лучше тем, что URL получается гораздо короче. Оба твоих примера URL не помещаются целиком в поле ввода браузера, да и на страничке не отображаются целиком.

anonymous
()
Ответ на: комментарий от anonymous

>Вариант с номером лучше тем, что URL получается гораздо короче.

Бедный, ты URL в поле ввода руками набиваешь?

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Мы вроде о наглядности говорили, нет? Наглядность длинных URL сомнительна, особенно когда они не целиком показываются.

anonymous
()
Ответ на: комментарий от anonymous

>Мы вроде о наглядности говорили, нет? Наглядность длинных URL сомнительна

Но она в любом случае выше, чем "наглядность" URL с одним номером.

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Не намного. URL-и с параметрами не слишком удобны для восприятия, большинство людей в них не вчитывается. Тем более, когда URL длинный и даже не отображается целиком.

Я бы вообще URL при отображении ссылки на странице не показывал. А в поле ввода браузера всматриваться - это, думаю, для отдельных эстетов.

anonymous
()
Ответ на: комментарий от anonymous

>Не намного.

Но есть же? Так я не понимаю, в чём проблема. Ничуть не сложнее, на 5 минут работы, а юзеру - хоть самую малость, но нагляднее. Только Абсолютная Вселенская Лень может сподвигнуть использовать голые номера :)

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

А зачем? По-моему, лучше рабочее время потратить на что-нибудь более полезное. Ежели говорить о проектах-хобби, то да, можно такое сделать. Но это скорее, чтобы себя порадовать новой фишке своего детища.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.