我有一个应用程序,我希望用户能够为文章添加标签(类似于堆栈溢出标签),但我希望它是动态的。到目前为止,我把它作为JSON字符串(不要太乱)但这有一个主要的缺点。首先,我将向您展示一个示例,然后解释我的问题。
说我有一篇文章,它在蜜蜂上,所以用户标记:蜜蜂,昆虫,蜂蜜,户外。
然后在我的文章课(实体框架)中我有
string AssosciatedTags { get; set; }
将保留:"[\"bees\", \"insect\",\"honey\"]"
然后当我渲染文章时,我只是在javascript中执行:
JSON.parse(model.AssosciatedTags);
并尽我所能......轻松添加/删除标签。好吧,所以这里我没有真正想到的地方,现在我仍然相当困惑。我该如何实现排序机制?假设我的用户疯了。他们喜欢蜜蜂。他们可爱的黑色和黄色小条纹。因此,他们想要点击他们感兴趣的标签,我的服务器会返回那些标记了这些标签的文章。
但是怎么样?如果我有很多文章,将所有标记从JSON解析为数组似乎是一个坏主意,查找此标记并返回这些文章。我的另一个考虑是简单地查找“,tagName”,这是非常肮脏的。
是否有标准方式或希望更优化的方式。
答案 0 :(得分:3)
我的另一个考虑是简单地查找",tagName,"这很肮脏。
是的,那太肮了。这种技术有它的位置但不在这里。
将标记存储在具有架构int ArticleID, string TagName
的另一个表中。这样,您可以索引TagName
并有效地查询它。
这是标准解决方案。
如果您愿意,可以保留JSON字符串,但需要将其与存储标记的表保持同步。最好将其移除,或者非常小心。
答案 1 :(得分:1)
不要将您的代码存储为JSON。解析它们将对您的数据库造成巨大的影响。将它们分成自己的表。像这样:
articles <--- table of articles
tags <--- table of tags
articles_tags <--- join table that associates articles with tags
这被称为多对多关系。