【问题标题】:Best way to store tags in a database?将标签存储在数据库中的最佳方式?
【发布时间】:2011-04-02 04:05:02
【问题描述】:

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

  • 条目
  • 标签

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

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

【问题讨论】:

    标签: sql database database-design tags data-modeling


    【解决方案1】:

    你需要一个映射表。

    创建一个名为 entries_tags 的表,其中包含两列:entry_idtag_id,两个条目上都有一个多键。

    这称为多对多关系

    【讨论】:

    • 是的,确保没有条目有重复的标签。更新标签会有点棘手,因为您需要确保保留现有标签、添加新标签、删除已删除标签。当然,您可以随时删除所有内容,然后重新添加它们,以省去比较的麻烦。我想说的优点和缺点。
    • @o.k.w:您可以通过外键约束和事务更新来处理所有这些问题。
    • @o.k.w:此外,主键(首选)或两列上的唯一约束将确保每个组合的唯一性。
    • 太棒了!能否请您发布一个链接,让我可以在此阅读一些内容?
    【解决方案2】:

    您也可以采用 SO 方式,其中 除了 有一个交汇点/映射/交叉点表之外,您在条目上还有一个可标记的标签列表:

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

    如果在提取条目的关联标签时,您无法承受使用联结表的性能损失。当然,这里需要格外小心,因为您正在处理非规范化数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-31
      • 2012-07-27
      • 2016-05-29
      • 1970-01-01
      • 2011-09-14
      • 2018-03-16
      • 2011-06-26
      • 1970-01-01
      相关资源
      最近更新 更多