如何将标记添加到数据库

时间:2013-05-24 17:11:00

标签: java database-design google-cloud-datastore app-engine-ndb

假设我正在为所有博客免费工作,允许作家标记他们的帖子(基本上是twitter等等)。我该怎么做才能使查询针对速度进行优化?

我正在考虑使用标记字段,其中内容是标记列表

例如,条目可能是关于总统的文章,标签可能是:

tag={politics, family, social, news, economy}

请注意,标签不是预定义的,而且编写者会随心所欲地添加它们。

我所说的方法是最好的吗?或者有更有效的方法来做到这一点吗?

因为它可能很重要,我正在使用app-engine数据存储区,我的语言是java。

最终目标是允许用户按特定标签进行搜索,例如用户想要通过“婚姻”标签进行搜索。

1 个答案:

答案 0 :(得分:2)

首先,您可能不希望数据库中的任何字段成为任何内容的列表,因为您通常希望它在最坏情况下保持在第三范式,并且列是一个违反第一范式的值列表。

我用小规模项目进行标记的方式(没有尝试任何大的项目,所以我不确定它是否具有可扩展性)是有一个包含标记的查找表,以及一个链接表,其中包含要标记的事物的关键字及其标记的关键字。

所以它看起来像这样:

Thing                   Thing_Tags             Tags
------                  -----------            ----
ThingID (Guid)          ThingID (Guid)         TagID (Guid)
otherAttributes         TagID (Guid)           Tag (varchar)