我正在实现一个类似于StackOverflow标签系统的标签系统。我在想,当存储标签和与问题相关时,这种关系将直接与标签名称相关,还是最好创建一个字段tagID来将问题与标签“链接”起来?看起来直接链接到标记名更容易,但看起来并不好,主要原因是当使用统计和/或标记分类(IMHO)时,很难管理这一点。另一个问题是当一个管理员决定“修复”一个标签名称时。如果没有标记名称分隔的tagID,那么我将更改表的键...
你的想法是什么?
感谢你所有的回复。我将删除这篇文章,因为有另一篇文章具有相同的主题。我想知道为什么搜索和建议没有为我显示结果...
发布于 2009-02-14 16:19:45
发布于 2009-02-14 16:11:24
你问题的最后一句话似乎回答了这个问题。假设标签存储在一个标记表中,我将始终有一个ID列(int或GUID)和varchar/string列作为标记名。将某个其他实体与一个或多个标记相关联的多对多(连接表)将有两列,其中包含ID "other entity“和标记的ID。这样就可以很容易地编辑标记(例如更正拼写错误),而不需要触摸键。在使用包含与连接表的连接的查询时,您应该会获得更好的性能,这也意味着您可以更好地规范化数据。
记住,"the key, the whole key and nothing but the key, so help me codd"!:)
发布于 2009-02-14 16:08:49
如果您预见到许多标签,并且正在使用关系数据库,那么在内部使用数据库本地支持的ID (例如RID)可能会给您带来更好的性能。
如果这不是一个问题,那就使用简单的短标记名。您可以为标记指定长名称,在有意义的地方也会显示在用户界面中(例如,在创建新标记时要求用户提供一个名称)。您更有可能必须编辑长名称,没有任何东西直接引用,所以这不是问题。
另外,如果您使用的是关系数据库,使用一个简单的查询来更改标记名及其所有引用可能并不是很困难,这可能只是一个稍微昂贵的操作,但它可能不会频繁地完成,因此您需要对其进行优化。考虑到你可能有重复的标签,你也想要合并,所以你可能无论如何都想要这样做。
https://stackoverflow.com/questions/549292
复制相似问题