我正在开发一个网站,要求用户为其新创建的内容提供标记(类似于stackoverflow标记)。但是如何存储这个标签? ,如果使用mysql数据库,那么我必须设置列数限制和标签本身数量。既然我希望为用户提供无限制的标记选项,应遵循哪种方法?
答案 0 :(得分:5)
这是一个经典的 n到m关系。喜欢这个
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'
答案 1 :(得分:0)
我要做的是:创建一个单独的表,用于存储标签的名称。然后,您必须使用外键,实质上,当他们选择标签时,您的每个条目链接指向您的行标签表。这样您就可以存储“无限制的标记”,因为您可以继续添加标记表。
答案 2 :(得分:-1)
有多种方法可以解决这个问题:
tags
表。这是最传统的做法。例如,wordpress有tags
和categories
表链接到posts
表,其中存储了用户发布的每篇帖子。json
字段中(现在大多数数据库都包含mysql和pgsql),而不是存储在单独的tags
表中。这样做的好处是,当一个连接被消除时,您的查询将更快。缺点是您不会获得标准化的通常好处,即有效的存储大小。html,css,javascript
,然后在您想要处理它们时使用分隔符进行拆分。当然,明显的缺点是您无法使用该分隔符(在此示例中为逗号)作为标记的一部分。