将标签存储在数据库中的最佳方式?

问题描述:

我有一个包含两个表的数据库:将标签存储在数据库中的最佳方式?

  • 标签

条目表中包含的帖子,每个都有一个或多个标签。问题是,每个帖子可以有任意数量的标签。换句话说,我不能有'tag1','tag2'等列,并做一个LEFT JOIN。

我应该如何设置条目,以便每个帖子可以有任意数量的标签?

您需要一个映射表。

创建一个名为entries_tags表包含两列:entry_idtag_id,对两个条目多键。

这被称为多对多的关系

+0

是的,并确保没有条目重复标签。更新标签会有点棘手,因为您需要确保现有标签保持不变,添加新标签,删除标签。当然,你可以随时删除所有内容,然后重新添加它们以节省比较的麻烦。我会说优点和缺点。 – 2010-08-22 01:49:45

+1

@ o.k.w:您可以通过外键约束和事务更新来处理所有这些问题。 – Borealid 2010-08-22 01:53:27

+0

@ o.k.w:另外,两个列上的主键(首选)或唯一约束将确保每个组合的唯一性。 – 2010-08-22 01:57:02

你也可以做到这一点的SO-方式,这里除了具有结/映射/交集表,你有那加标签条目的标签列表:

entries table: 
post_id: 3539744, .... tags: sql, database, database-design, tags, data-modeling 

如果您在为条目拉取相关标签时,不能使用联结表的性能。当然,在这里需要格外小心,因为你正在处理非规范化的数据。