如何在数据库中保存标签(关键字)?

use*_*582 12 mysql tags

我想用php和mysql创建一个简单的标签系统,这样用户就可以通过表单添加几个标签.我的问题是,我应该将标签保存为单个数据库列中的数组吗?例如."tag1,tag2,tag3"..或者我应该在数据库表中有单独的列,我应该在每列中保存每个标记.我希望我的问题很明确.谢谢.

Kla*_*sen 26

我可能不会说.使用标记与被标记对象之间的多对多关系.例如,如果被标记的东西是一个问题,那么表格可能如下所示:

Question:
    QuestionId
    Title
    Body

Tag:
    TagId
    Name

QuestionTags:
    QuestionId
    TagId
Run Code Online (Sandbox Code Playgroud)

  • 这种方式提供可伸缩性并允许使用索引进行数据库优化.好答案. (3认同)

小智 9

今天也遇到了这个问题并在这里收集了一些想法,虽然问题不是很新,但我也会留下我的解决方案:

我认为克劳斯比斯科夫霍夫曼给出的答案并不坏,但我会加上它并将标签列表存储为多对多的表,就像他说的那样,但也作为序列化的字符串以某种形式(通过序列化像user466764说,或者只是一个逗号分隔的东西,就像你说的那样,在主表中可以使用implode/explode处理.

是的,我知道:对于许多数据库完美主义者而言,存储两次相同的数据并不是很受欢迎,因为它存在不一致的危险,但我会这样做以提高性能和简单性:

多对多表(标记表)仅用于搜索.为了提高搜索性能,我只限制对该表的访问以进行搜索(当然,我们需要在编辑标签时更新它),但是从不查询它只是为了在某处查看/列出标签.序列化的标签列表适用于您正在查看相关文章或项目的每个地方 - 当显示该项目时,您已经拥有该表格,每次要显示该页面时,对标记表格执行另一个查询已经在主表中列出了列表是不必要的.确保在更新标记时要小心,以便始终在两个位置更新它们,最好通过同时执行这两个操作的单个setter函数,并且不应该存在不一致的问题.