我正在一个网站上,要求用户给他们新创建的内容标签(类似于stackoverflow标签)。但如何存储这个标签? ,如果使用mysql数据库,那么我必须设置列数和标签本身数量的限制。因为我希望为用户提供无限制的标签选项,应遵循哪种方法?如何在数据库中存储无限标签?
回答
这是一个经典的n关系。像这样
tags table
----------
id
name
...
content table
-------------
id
title
...
content_tags table
------------------
content_id
tag_id
存储多个标签为一个单一的内容,一个记录添加到content_tags表,你希望它有每个标签。例如:
content_tags table
------------------
content_id | tag_id
1 | 2
1 | 5
1 | 1
为了然后得到一个内容记录的标签做:
select t.*
from tags t
join content_tags ct on ct.tag_id = t.id
join content c on ct.content_id = c.id
where c.title = 'my content title'
谢谢。如果我使用有限的标签,假设他们总共有20个。然后,我需要创建20列,并假设某些用户给出的标签较少(大多数情况下都是这种情况)。在这种情况下,大多数列将是空的。在这种情况下做什么,通过允许这么多表格条目为空的方式来设计好的设计? – Republic
我在答案中提到的设计是无论标签多少,固定或不固定都要选择的设计。那么如果有最大值。每个帖子只有一个标签,那么你当然不会这样做。 –
我会做的是:制作一个单独的表格,用于存储标签的名称。然后,您必须使用外键,并且在选择标签时,您必须将每个条目链接到行中您的标签表。这将允许你存储'无限标签',因为你可以继续添加到标签表。
有多种方法可以解决这个问题:
- 至于对方的回答表明,创建
tags
表中的数据库具体。这是做这件事的最传统的方式。例如,wordpress有tags
和categories
表,该表链接到posts
表,其中存储由用户发布的每个帖子。 - 另一种方法是将它存储在主表中的
json
字段(现在大多数数据库都包括mysql和pgsql),而不是存储在单独的tags
表中。这样做的好处是,当一个连接被取消时,你的查询会更快。缺点是,你不会得到正常化的通常好处,即有效的存储大小。 - 另一种快速和肮脏,但“老派”的做法是在单个备忘录或LOB字段中使用分隔符来存储标签。使用逗号分隔符,它将类似于:
html,css,javascript
,然后在您想要处理它们时使用分隔符进行分割。当然,明显的缺点是你不能使用该分隔符(在这个例子中是逗号)作为标签的一部分。
消除JOIN以某种方式提高查询性能的想法很容易被误导 – Strawberry
- 1. 在图数据库中存储标签
- 2. 在数据库中存储JSP标签
- 3. 如何在数据库中存储域名标签?
- 4. 在数据库中存储标签。存储标签一次或多次?
- 5. 我应该如何将HTML标签存储到数据库中?
- 6. 将标签存储在数据库中的最佳方式?
- 7. 用标签在数据库中存储文本
- 8. 如何在数据库中存储
- 9. 如何在数据库中存储“\”?
- 10. 如何在android数据库中存储
- 11. 我应该如何设计表格以将标签存储在数据库中?
- 12. 标签存储在数据库中的网站(如Facebook)上的图像标记
- 13. 如何在Sencha Touch中的数据存储中显示标签中的数据
- 14. 如何将诸如RFID标签数据这样的长数据存储在postgres数据库中?
- 15. 如何在数据库中保存标签(关键字)?
- 16. 数据库设计:如何在数据库中存储XML/JSON?
- 17. 如何在数据库中存储开放标识号?
- 18. 如何在数据库中存储坐标
- 19. 如何使用Java在数据库中存储XML标记值?
- 20. 没有好几趟数据库中存储的标签
- 21. 如何在存储库中创建标签或点
- 22. 如何将无限数据存储到mysql中的特定列
- 23. Redis数据库存储限制和HA
- 24. 无法在数据库中的数据存储在iPhone
- 25. xml如何存储在数据库
- 26. 如何在HTML5中将数据存储到数据库中
- 27. 根据存储在数据库中的消息属性键显示标签
- 28. 在android数据库中存储数据
- 29. 不在数据库中存储数据
- 30. 无限容量的数据存储
如果我使用有限的标签,假设它们总共有20个,那该怎么办。然后,我需要创建20列,并假设某些用户给出的标签较少(大多数情况下都是这种情况)。在这种情况下,大多数列将是空的。在这种情况下做什么,通过允许这么多表格条目为空的方式来设计好的设计? – Republic