Stackoverflow允许海报为他们的问题制作标签。
现在说我有一些文章,并希望为每个文章提供一些关键字标签。我正在使用PHP和mysql。
执行此操作时使用的最佳数据库结构是什么?
每篇文章限制5个关键字和无限制关键字案例是否需要不同的数据库结构?
答案 0 :(得分:4)
最好规范化您的数据库。你找不到更好的。
<强>文章:强> article_id,blablabla
<强>标签:强> tag_id,title
<强> tags_to_articles:强> article_id的,TAG_ID
在任何情况下,最好规范化您的数据库。总是。如果您改变主意并限制标签,请不要担心。由于使用的内存量最小,上面的结构总是最好的。
答案 1 :(得分:0)
你将有3张桌子;
帖子 - 在这里存储所有帖子
标签 - 在这里存储所有可能的标签
posts_tags - 在这里您将帖子链接到您的标签,例如它可能只有3个 列(id,post_id,tag_id)。
5个关键字的限制应该只在接口中实现,数据库不应该有所不同。 posts_tags表称为联结表,它将2个表链接在一起。这种关系是一对多的,有一个帖子可能有很多标签。
答案 2 :(得分:0)
我想使用链接表创建多对多的引用会很好。所以我创建了三个表:articles
,tags
和links
来存储与article_id
相关联的tag_id
也许,有一天对象orientet数据库将取代像mysql一样的db - 他们可以使用任何附加结构来管理这个任务... :)
答案 3 :(得分:0)
取决于您要使用的数据库类型。
最正常化的一个看起来像这样
posts - id | title | body |
tags - id | name |
posts_tags - post_id | tag_id
查询速度非常快,设置建议只需查看tags
表。
您还可以将标签直接嵌入帖子中
posts - id | title | body | tags
标签只是一个逗号分隔的文本字段。此表上的正常查找可能不会像其他解决方案一样快,并且您必须在开始处理建议之前使您的设置区别开来。一个简单的解决方法是将一个支持全文的标签表保存为单独的查找。如果您只是运行像Sphinx这样的全文搜索系统来处理搜索,这种方法效果最佳。
此模式更适合像Mongo这样的noSQL解决方案,其中tags只是posts文档的子文档。
答案 4 :(得分:0)