я и мои коллеги разрабатываем веб-сайт с идеей, аналогичной Stackoverflow, но для отправки заданий (и для внутреннего использования). Сегодня утром мы поговорили о задачах с тегами и не могли понять, какой вариант будет самым быстрым, или если мы что-то не упустили.
Давайте представим таблицу с тегами, которая будет динамически обновляться в зависимости от пользователей. Пользователи могут создавать любые теги, и они будут добавлены в эту таблицу. Структура следующая:
- ID
- имя
- Количество * * 1 010
Я сейчас вернусь к фактической точке. Если вы нажмете, например, тег «PHP», он покажет вам другую страницу со всеми задачами, помеченными как «PHP». Нечто подобное этой странице . Важным является список связанных тегов . Как представить это в базе данных?
На ум пришли два варианта, но я не думаю, что какой-то из них на самом деле является наиболее эффективным.
Выберите все задачи с тегом "PHP" и проверьте, какие другие теги они содержат. Через несколько лет мы можем получить ответ от сервера.
Создайте таблицу с cols tag , related tag , count , где будут все возможные отношения тега. Единственная проблема, которую мы видим - это двуличие. Мы могли бы иметь тег PHP и связанный тег DB2, но мы могли бы также иметь тег DB2 со связанным тегом PHP, который, конечно, является тем же самым отношением, с тем же количеством.
Мне действительно нравится вариант № 2, но без двуличия. Возможно, вариант, при котором не было бы такой тесной связи между тегами (как если бы не было никаких «первичных» и «вторичных» тегов), мог бы работать лучше всего. Я не совсем уверен в этом и не хотел бы моделировать то, что не сработало бы в будущем или было бы слишком медленным, если бы было, например, один миллион тегов.
Мы будем использовать PHP и mySQL или DB2, но, думаю, это не имеет значения.
Итак, реальные вопросы таковы: есть ли другие, возможно, лучшие варианты? В случае каких-либо вопросов, просто спросите меня.
Заранее спасибо.