【问题标题】:ID for tags in tag systems标签系统中标签的 ID
【发布时间】:2010-10-07 15:36:37
【问题描述】:

我正在实现一个类似于 StackOverflow 标签系统的标签系统。我在考虑在存储标签并与问题相关时,这种关系将直接与标签名称相关,或者最好创建一个字段 tagID 以将问题与标签“链接”?看起来直接链接到标签名称更容易,但看起来不太好,主要是为什么在使用统计数据和/或标签分类(恕我直言)时很难管理这个。另一个问题是当一个管理员决定“修复”标签名称时。如果标签名称中没有标签ID,那么我将更改表的键...

你有什么想法?

感谢所有回复。我将删除此帖子,因为还有其他具有相同主题的帖子。我想知道为什么搜索和建议没有为我显示结果...

【问题讨论】:

    标签: database database-design tags primary-key


    【解决方案1】:

    【讨论】:

    • 谢谢,我正在考虑删除这篇文章。
    • 无需删除。答案中的链接很有用。
    【解决方案2】:

    您问题中的最后一句话似乎回答了它。假设标签存储在标签表中,我将始终有一个 ID 列(int 或 GUID)和标签名称的 varchar/string 列。将一些其他实体与一个或多个标签相关联的多对多(联结表)将有两列包含 ID 的“其他实体”和标签的 ID。 然后无需触摸按键即可轻松编辑标签(例如纠正拼写错误)。使用包含与联结表连接的查询时,您应该会获得更好的性能,这也意味着您可以更好地规范化数据。

    记住,“the key, the whole key and nothing but the key, so help me codd”! :)

    【讨论】:

      【解决方案3】:

      如果您预见到许多标签,并且正在使用关系数据库,那么使用数据库本身支持的 ID(例如 RID)可能只会给您带来更好的性能。

      如果这不是问题:使用简单的短标签名称。您可以为标签提供长名称,这些名称也将显示在用户界面中有意义的地方(例如,在创建新标签时向用户询问)。您更有可能必须编辑长名称,没有任何东西直接引用,所以这不是问题。

      除此之外,如果您使用的是关系数据库,通过简单的查询更改标签名称及其所有引用可能不是很困难,这可能只是一个稍微昂贵的操作,但可能不会频繁地完成,以至于您需要对其进行优化。并且考虑到您可能也有想要合并的重复标签,所以无论如何您可能希望能够这样做。

      【讨论】:

      • 在创建标签时要求用户同时提供短版和长版只会导致混淆。最好像您建议的那样仅使用标签名称或人工键。
      • 我同意这可能会导致混淆 - 这取决于网站和它所面向的用户。这可以是可选的,但只需要在标签创建时完成,因此为了用户友好的名称,它可能是值得的。
      猜你喜欢
      • 2011-04-27
      • 2013-10-07
      • 2020-10-18
      • 1970-01-01
      • 2014-08-07
      • 1970-01-01
      • 2010-12-31
      • 1970-01-01
      相关资源
      最近更新 更多