我听说过几种实现标记的方法; 使用TagID和ItemID之间的映射表(对我有意义,但它是否可以缩放?),向ItemID添加固定数量的可能TagID列(似乎是一个坏主意),将标记保留在逗号分隔的文本列中(声音疯了,但可以工作).我甚至听过有人推荐稀疏矩阵,但那么标签名称如何优雅地增长?
我错过了标签的最佳做法吗?
我开发了一个使用标签(关键词)的网站,以便对照片进行分类.现在,我在MySQL数据库中拥有的是一个具有以下结构的表:
image_id (int)
tag (varchar(32))
Run Code Online (Sandbox Code Playgroud)
每当有人标记图像(如果标记有效并且有足够的投票),它就会被添加到数据库中.我认为这不是最佳的做事方式,因为现在我有5000个带标签的图像,标签表有超过40000个条目.我担心这会开始影响性能(如果它还没有影响它).
我认为这个其他结构认为获取与特定图像相关联的标签会更快,但是当我想要获取所有标签或者最常用的标签时,它看起来很糟糕:
image_id (int)
tags (text) //comma delimited list of tags for the image
Run Code Online (Sandbox Code Playgroud)
有没有一种正确的方法可以做到这一点,或者两种方式都或多或少相同?思考?
使用数据库模式来标记此问题的已接受答案是否可以使用可处理大量数据的group_concat进行查询?我需要为所有标记为标记x的项目获取带有标签的项目.使用具有约.5百万个标签的group_concat的查询在> 15秒时非常慢.没有group_concat(没有标签的项目)它是~0.05秒.
作为一个附带问题,SO如何解决这个问题?
我找到了一些关于在关系数据库和文档数据库中设置标记系统的建议,但对于图形/多模型数据库没有任何建议。
我正在尝试为 ArangoDB 中的文档(我们称它们为“文章”)设置一个标记系统。我可以想到两种在 Arango 等多模型(图形+文档)数据库中存储标签的明显方法:
这些实际上是实现此目的的两种主要方法吗?两者都不理想。例如:
这让我提出了一个明确的问题:关于后一个选项,是否有任何简单的方法可以自动使连接的“标签”文档显示在文章文档中?例如,有一个数组属性以某种方式“镜像”tag.name了连接的标签文档的属性?
也欢迎一般性建议。
如何将项目的标签存储在数据库中无忧?
每个项目都带有多个标签。我已经阅读了一些有效的解决方法:
但我认为对此有更好的解决方案。为什么我们不能简单地将标签作为每个项目的长字符串包含在内?
Table : Brand_Shops
Columns : brand_id, brand_name, content, tags
Run Code Online (Sandbox Code Playgroud)
范例:
1 || Nike || shoes bags sports football soccer t-shirts track-pants
2 || GAP || wallets t-shirts jeans shoes perfumes
Run Code Online (Sandbox Code Playgroud)
这没有原子性,但完全适合标记的目的。如果必须添加新品牌,只需将新标签与其一起添加。因此,获取它也将非常容易。我不明白为什么这不是一个有效的解决方案。
我正在实现类似于StackOverflow标签系统的标签系统.我在考虑存储标签并与问题相关时,该关系将直接与标签名称相关,或者最好创建字段tagID以将问题与标签"链接"?看起来直接链接到标签名称更容易,但它看起来不太好,主要是为什么在使用统计和/或标签分类(恕我直言)时很难管理这个.另一个问题是当一个管理员决定"修复"标签名称时.如果没有tagID与标签名称分开,那么我将更改表格的键...
你有什么想法?
感谢所有回复.我将删除此帖子,因为有另一篇帖子具有相同的主题.我想知道为什么搜索和建议没有显示给我的结果......
建议存储这样的标记表.
Table: Item
Columns: ItemID, Title, Content
Table: Tag
Columns: TagID, Title
Table: ItemTag
Columns: ItemID, TagID
Run Code Online (Sandbox Code Playgroud)
另一个SO帖子也说了同样的话.任何人都可以解释为什么标签应该像这样存储?我猜测ItemID是一些内部val,title是标签名称(c ++,sql,noob等)内容是我想用我的项目存储的任何其他数据.为什么不喜欢
Table: Item
Columns: ItemID, Title, <more data i want>
Table: TagList
Columns: ItemID, Title
Run Code Online (Sandbox Code Playgroud)
项目中的标题为"项目名称",标题标题为"c ++""sql""noob""etc"
tags ×4
database ×2
mysql ×2
sql ×2
tagging ×2
arangodb ×1
javascript ×1
optimization ×1
performance ×1
primary-key ×1
sqlite ×1
structure ×1