如何在数据库中存储无限标签?

Rep*_*lic 0 php mysql database tags nosql

我正在一个网站上工作,要求用户为他们新创建的内容提供标签(类似于stackoverflow标签).但是如何存储这个标签?,如果使用mysql数据库,那么我必须设置列数限制和标签本身数量.既然我希望为用户提供无限制的标记选项,应遵循哪种方法?

jue*_*n d 5

这是一个经典的n到m的关系.像这样

tags table
----------
id
name
...


content table
-------------
id
title
...

content_tags table
------------------
content_id
tag_id
Run Code Online (Sandbox Code Playgroud)

要为单个内容存储多个标记,请在content_tags表中为您希望它拥有的每个标记添加记录.例:

content_tags table
------------------
content_id |  tag_id
1          |  2
1          |  5
1          |  1
Run Code Online (Sandbox Code Playgroud)

然后获取内容记录的标记:

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'
Run Code Online (Sandbox Code Playgroud)