关键字标签结构

时间:2011-07-27 08:01:12

标签: php mysql

Stackoverflow允许海报为他们的问题制作标签。

现在说我有一些文章,并希望为每个文章提供一些关键字标签。我正在使用PHP和mysql。

执行此操作时使用的最佳数据库结构是什么?

每篇文章限制5个关键字和无限制关键字案例是否需要不同的数据库结构?

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)

我想使用链接表创建多对多的引用会很好。所以我创建了三个表:articlestagslinks来存储与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)

嗯,我不完全同意其他答案。我的答案取决于你的数据。会有多少篇文章。如果它将是大量的艺术品,其他答案是要走的路。如果您的文章数量有限(而且数量总是很少),那么我会将它们存储在同一个表格中(article_id,article_text,keywords)。