2015-03-05 2 views
3

У меня есть приложение, и я хочу, чтобы пользователи могли добавлять теги к статьям (похожие на теги переполнения стека), но я хочу, чтобы они были динамическими. Пока у меня это как строки JSON (не слишком сильно извиняюсь), но это имеет большой недостаток. Во-первых, я покажу вам пример, а затем объясню свою проблему.Как реализовать теги в базе данных?

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

Тогда в моей статье класс (рамочный объект) У меня есть

string AssosciatedTags { get; set; } 

который проведет: "[\"bees\", \"insect\",\"honey\"]"

тогда, когда я сделать статью я просто в JavaScript:

JSON.parse(model.AssosciatedTags); 

и делать все, что я хочу ... добавлять/удалять теги с легкостью. Хорошо, вот и вот, где я действительно не думал достаточно, и теперь я все еще довольно смущен. Как я могу реализовать механизм сортировки? Скажем, мои пользователи с ума сошли. Они любят пчел. Их милые маленькие черные и желтые полосы. Поэтому они хотят, чтобы теги кликов интересовались, и мой сервер возвращает статьи, у которых есть теги, ассоциированные с ними.

Но как? Если у меня много статей, кажется, что плохая идея анализировать все теги из JSON в массив, искать этот тег и возвращать эти статьи.

Мое другое соображение заключается в простом поиске «, tagName», которое довольно грязно.

Есть ли стандартный способ или тот, который, мы надеемся, будет более оптимальным.

+0

Возможный дубликат [Рекомендуемый дизайн базы данных SQL для тегов или тегов] (http://stackoverflow.com/questions/20856/recommended-sql-database-design-for-tags-or-tagging) –

+0

Исправить. Благодаря! – user2330270

ответ

3

Мое другое соображение относится к простому поиску «, tagName», которое довольно грязно.

Да, это грязно. У этой техники есть место, но не здесь.

Сохраните теги в другой таблице со схемой int ArticleID, string TagName. Таким образом, вы можете индексировать TagName и запрашивать его эффективно.

Это стандартное решение.

Если вы хотите сохранить строку JSON, но вам нужно синхронизировать ее с таблицей, хранящей теги. Предпочтительно удалить его или быть очень осторожным.

+0

Это то, о чем я думал. Вопрос. Когда вы предлагаете теги пользователям, вы запрашиваете таблицу ArticleTags для отдельного TagName или создаете другую таблицу для хранения списка различных тегов? –

+1

Это зависит от ваших данных и требований к производительности.Если производительность достаточно хорошая, то подход DISTINCT легко разрабатывать и поддерживать. Небольшой потенциал для ошибок или несоответствий. Вы также можете создать индексированное представление для отдельного запроса и получить отличную производительность. @MarkGood – usr

1

Не храните ваши метки в качестве JSON. Анализ их будет огромным замедлением в вашей базе данных. Разделите их на свой стол. Что-то вроде этого:

articles <--- table of articles 
tags <--- table of tags 
articles_tags <--- join table that associates articles with tags 

Это называется отношением «многие ко многим».

Смежные вопросы