以数据库方式处理标签的更有效方法是什么?

时间:2011-08-23 18:44:47

标签: php mysql tags

使用taglist字段是否更有效,所有标签都用空格分隔,或者再使用2个表(tag:tagid tagtext,tagitem:tagid,itemid)?

4 个答案:

答案 0 :(得分:3)

效率很大程度上取决于你在做什么。如果要根据标记名称进行查询,如果您的标记表在标记和项目表上都标记了ID(即选项#2),则可能会更快。但是,除非你有数千行,否则它可能没什么区别。如果您根本没有那么多标签,那么差异就会更小。

但是,如果你想按项目ID获取标签,那么第一种方法的速度要快得多。我再次怀疑你会注意到。

还需要考虑其他因素:数据完整性和规范化。如果使用两个表和外键,则可以更轻松地使标记集与项目保持一致。如果删除了某个代码并且您只使用了一个表格,则旧项目仍会包含旧代码。此外,获取唯一标记列表并使其保持一致更容易。如果您在另一个表中有标签,这将打开一个全新的组织世界:您可以为标签创建和修改创建时间戳,将标签标记为活动或非活动(以及可能的其他状态)等。

答案 1 :(得分:1)

第二种选择。分别存储标签。如果将特定标记存储在单个字段中,则无法编写好的查询来搜索特定标记。您不希望使用MATCH或LIKE来过滤标记。通过将它们存储在单独的表中,您可以轻松找到所需的标签以及相关文章。但是,您的表格需要正确编入索引。

如果需要查询这些值,切勿在数据库中存储逗号/空格/其他分隔值。数据库的全部本质是以结构化的方式存储数据。这样,数据库可以在很大程度上优化对数据的检索。

答案 2 :(得分:0)

将数据拆分为两个附加表的第二个版本效率更高,因为它允许数据库使用索引来运行您最需要的查询(Get all texts with a certain tagget a count of how often the tags are used sorted by count标签云,get all tags for the given text

答案 3 :(得分:-1)

一个表会更高效,但有两个表通常是存储简单标记的正确方法。