标签系统中标签的ID

时间:2009-02-14 16:02:44

标签: database database-design tags primary-key

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

你的想法是什么?

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

3 个答案:

答案 0 :(得分:9)

答案 1 :(得分:3)

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

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

答案 2 :(得分:0)

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

如果这不是问题:请使用简单的短标签名称。您可以为标签提供长名称,这些名称将在有意义的位置显示在用户界面中(例如,在创建新标签时询问用户)。你更可能需要编辑长名称,没有直接引用,所以这不是问题。

除此之外,如果您正在使用关系数据库,使用简单查询更改标记名称及其所有引用可能并不是很困难,它可能只是稍微昂贵的操作,但它可能不会要经常做,你需要优化它。并且考虑到您可能还有要复制的重复标记,因此您可能希望能够这样做。