Database 标签系统中标签的ID

Database 标签系统中标签的ID,database,database-design,tags,primary-key,Database,Database Design,Tags,Primary Key,我正在实现一个类似StackOverflow标签系统的标签系统。我在想,当存储标签并与问题相关时,这种关系将直接与标签名相关,或者最好创建一个字段tagID来“链接”问题与标签?看起来直接链接到标记名更容易,但看起来不太好,主要是因为在处理统计数据和/或标记分类(IMHO)时很难管理这一点。另一个问题是当一个管理员决定“修复”标签名时。如果没有从标记名中分离出标记ID,那么我将更改表的键 你的想法是什么 谢谢你的回复。我将删除这篇文章,因为还有其他文章与相同的主题。我想知道为什么搜索和建议没有为

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

你的想法是什么


谢谢你的回复。我将删除这篇文章,因为还有其他文章与相同的主题。我想知道为什么搜索和建议没有为我显示它的结果…

如果您预见到许多标记,并且正在使用关系数据库,使用数据库本机支持的ID(例如RID)内部可能会给您带来更好的性能

如果这不是一个问题:使用简单的短标记名。您可以为标签指定长名称,该名称也将显示在用户界面中,只要有意义(例如,在创建新标签时要求用户提供一个)。您更可能需要编辑长名称,因为没有直接引用,所以这不是问题


除此之外,如果您使用的是关系数据库,那么通过一个简单的查询来更改标记名及其所有引用可能不是很困难,这可能只是一个稍微昂贵的操作,但可能不会频繁地执行,因此您需要对其进行优化。考虑到你可能有你想合并的重复标签,所以你可能希望能够做到这一点。

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


记住,“!:)

看看这些相关的问题:


要求用户在创建标签时提供短版本和长版本只会导致混淆。最好像你建议的那样只使用标签名或人工键。我同意这可能会导致混淆-这取决于网站和它面向的用户。这可以是可选的,只需要在标签创建时完成,所以为了方便用户使用,这可能是值得的。谢谢,我想删除这篇文章。不需要删除它。答案中的链接很有用。