2009-02-14 178 views
4

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

您的想法是什么?

感谢您的回复。我会删除这篇文章,因为有另一篇文章的主题相同。我想知道为什么搜索和建议没有显示出我的结果...

回答

0

如果您预见了很多标签,并且正在使用关系数据库,那么使用数据库在本地支持的ID(例如RID)只是给你更好的表现。

如果这不是一个问题:去简单的短标签名称。您可以为标签提供长名称,这些名称也将在用户界面中显示,例如,在创建新标签时询问用户。你更有可能不得不编辑长名字,这些名字都没有直接引用,所以这不是问题。

另外,如果您使用的是关系数据库,使用简单的查询来更改标签名称及其所有引用可能不是很困难,但它可能只是一个稍微昂贵的操作,但它可能不是要经常完成,你需要为它进行优化。并且考虑到你可能有重复的标签,你也想合并,所以你可能希望能够做到这一点。

+0

要求用户在创建标签时同时提供短版本和长版本只会导致混淆。最好坚持使用标签名称或人造钥匙,就像您建议的那样。 – BigJump 2009-02-14 16:12:00

+0

我同意这可能会导致混淆 - 这取决于网站和面向的用户。这可以是可选的,但仅在创建标签时才需要完成,所以为了用户友好名称的好处,这可能是值得的。 – 2009-02-14 16:16:44

3

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

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