在数据库中存储标签的最佳方式是什么?

7

我有一个包含两个表的数据库:

  • entries(文章)
  • tags(标签)

文章表包含了每篇文章所拥有的一个或多个标签。问题在于,每篇文章所拥有的标签数量是不确定的。换句话说,我不能使用“标签1”、“标签2”等列进行左连接。

那么,我应该如何设置文章表,以便每篇文章都可以拥有任意数量的标签呢?

2个回答

11

你需要一个映射表。

创建一个名为entries_tags的表,它包含两个列:entry_idtag_id,并在这两个条目上有一个多键。

这被称为多对多关系


是的,并确保没有条目有重复标记。更新标记会有一些棘手,因为您需要确保现有标记保留,添加新标记,删除已删除的标记。当然,您可以始终删除所有内容,然后再次添加它们,以节省比较的麻烦。优缺点我会说。 - o.k.w
1
@o.k.w:你可以通过外键约束和事务更新来处理所有这些问题。 - Borealid
@o.k.w:此外,在这两列上设置主键(最好)或唯一约束将确保每个组合的唯一性。 - OMG Ponies
太好了!你能否提供一个链接让我了解一下这个问题? - Nathan Osman

3

您也可以按照SO的方式进行操作,在具有连接/映射/交集表的同时,您还可以在可标记的条目上拥有标签列表:

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

如果在提取条目的相关标签时,无法承受使用交汇表所带来的性能损失。当然,在这里必须格外小心,因为您正在处理非规范化数据。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接