0

我正在尝试构建一个小型 Web 应用程序。该应用程序将存储书签及其标签。

书签:www.javaworld.com
标签:java,编程

书签:www.jquery.com

标签:java,webapps

现在我的搜索条件是基于标签的。如果用户搜索 java,它应该给出他用 java 存储的所有书签。此处必须显示 www.javaworld.com 和 www.jquery.com。

我的数据库表看起来像这样

用户(UID、Uname、密码)

书签(BID、UID、bookmark_url、tag1、tag2、tag3、tag4、tag5)

或者

书签(BID、UID、书签)

标签(TID、BID、标签名)

这里 BID 和 TID 是代理键。

考虑到我给出的场景,请提出更好的方法来解决这个问题。

4

2 回答 2

1

为什么不在 Stackoverflow 上做类似的事情呢?标签是“全局的”,不绑定到单个书签。允许您定义标签而无需事先定义书签,从而提高了灵活性。在您的第一个解决方案中限制为 5 个标签也不是一个好主意。

像下面这样分离它们可以让您更好地运行聚合函数(制作标签云),并且您可以使用标签表在复选框/多选中更好地显示新书签的标签。如果他们已经绑定到另一个书签,那会感觉很尴尬。

Table: User [UID, Uname, PW]

Table: Bookmark [BID, UID, url]

Table: Tag [TID, Tagname]

Table: Bookmark_Tag [BID, TID]
于 2012-06-19T08:26:35.343 回答
0

您的第一个解决方案有以下问题:
- 您有固定数量的标签:用户如何为她的书签定义第 6 个标签?
- 您可能有许多 NULL 值:如果书签的标签少于 5 个,则其他列将不包含任何值。在这种情况下,您可能会为未使用的列浪费内存。
- 为了加快检索机制,您应该索引要执行搜索的列(在您的情况下为 tag1,...tag5):您应该索引所有 5 个标记列。

出于这样的原因,我建议您选择第二种解决方案,在 Tags 表中的“Tagname”属性上定义一个索引。或者,作为替代方案,您可以包含一个标签表,您可以在其中定义每个标签。在这种情况下,您的标签表将通过使用标签的数字 id (int) 来引用标签表。

于 2012-06-19T08:35:00.880 回答