ID для тегов в системах тегов - PullRequest
4 голосов
/ 14 февраля 2009

Я реализую систему тегов, аналогичную системе тегов StackOverflow. Я думал о том, чтобы при хранении тегов и применительно к вопросу эти отношения были напрямую связаны с именем тега, или лучше создать поле tagID, чтобы «связать» вопрос с тегом? Похоже, что связать напрямую с именем тега проще, но выглядит не очень хорошо, в основном, почему при работе со статистикой и / или категоризацией тегов (IMHO) может быть сложно управлять этим. Другая проблема, когда один администратор решает «исправить» имя тега. Если идентификатор тега не отделен от имени тега, то я буду менять ключ таблицы ...

Что ты думаешь?

Спасибо за все ответы. Я удалю этот пост, так как есть другие посты на ту же тему. Интересно, почему поиск и предложение не показывают его результатов для меня ...

Ответы [ 3 ]

3 голосов
/ 14 февраля 2009

Ваше последнее предложение в вашем вопросе, кажется, отвечает на него. Предполагая, что теги хранятся в таблице тегов, у меня всегда будет столбец идентификатора (int или GUID) и столбец varchar / string для имени тега. Таблица «многие ко многим» (таблица соединений), которая связывает некоторые другие объекты с одним или несколькими тегами, будет иметь два столбца, содержащих идентификаторы «другой объект» и идентификатор тега. Затем легко отредактировать тег (например, чтобы исправить неправильное написание), не касаясь клавиши. Вы должны значительно повысить производительность при использовании запросов, включающих объединения с вашей таблицей соединений, а это также означает, что вы лучше нормализуете свои данные.

Помните, " ключ, весь ключ и ничего кроме ключа, так что помогите мне codd "! :)

0 голосов
/ 14 февраля 2009

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

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

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

...