我想用php和mysql创建一个简单的标签系统,这样用户就可以通过表单添加几个标签.我的问题是,我应该将标签保存为单个数据库列中的数组吗?例如."tag1,tag2,tag3"..或者我应该在数据库表中有单独的列,我应该在每列中保存每个标记.我希望我的问题很明确.谢谢.
Kla*_*sen 26
我可能不会说.使用标记与被标记对象之间的多对多关系.例如,如果被标记的东西是一个问题,那么表格可能如下所示:
Question:
QuestionId
Title
Body
Tag:
TagId
Name
QuestionTags:
QuestionId
TagId
Run Code Online (Sandbox Code Playgroud)
小智 9
今天也遇到了这个问题并在这里收集了一些想法,虽然问题不是很新,但我也会留下我的解决方案:
我认为克劳斯比斯科夫霍夫曼给出的答案并不坏,但我会加上它并将标签列表存储为多对多的表,就像他说的那样,但也作为序列化的字符串以某种形式(通过序列化像user466764说,或者只是一个逗号分隔的东西,就像你说的那样,在主表中可以使用implode/explode处理.
是的,我知道:对于许多数据库完美主义者而言,存储两次相同的数据并不是很受欢迎,因为它存在不一致的危险,但我会这样做以提高性能和简单性:
多对多表(标记表)仅用于搜索.为了提高搜索性能,我只限制对该表的访问以进行搜索(当然,我们需要在编辑标签时更新它),但是从不查询它只是为了在某处查看/列出标签.序列化的标签列表适用于您正在查看相关文章或项目的每个地方 - 当显示该项目时,您已经拥有该表格,每次要显示该页面时,对标记表格执行另一个查询已经在主表中列出了列表是不必要的.确保在更新标记时要小心,以便始终在两个位置更新它们,最好通过同时执行这两个操作的单个setter函数,并且不应该存在不一致的问题.
归档时间: |
|
查看次数: |
6546 次 |
最近记录: |