2012-10-09 44 views
1

我目前正在构建一个应用程序,该应用程序会根据他们的标签推荐网站基础。基于用户兴趣创建推荐算法

在我的网站上,当用户注册时,它会填充一个兴趣。所以这是一个示例兴趣:

football, model trains, hockey 

所以这是用逗号分隔的。所以当用户点击寄存器时会保存在我的数据库中。这是我的数据库的设计。

userID | name  | interest 
001 | John Doe | sports, model trains, hockey 

另一方面,我也有我的网站上的用户上传网站网址,并且还创建了与其相关的标签。所以这是我的数据库设计为:

postID | title   | tags 
    001 | techcrunch.com | technology,softwares,startups 
    002 | nba.com   | basketball,sports,all-star 
    003 | tmz.com   | gossip, showbiz 

所以对于这一个逻辑是,我想推荐NBA.com用户李四因为NBA.com具有运动的标签和李四的利益有一个运动标签。

你有什么想法该怎么做?只是一个后续问题,数据库设计是否正确,或者我应该创建一个新表来存储所有标记。类似的东西(虽然不知道)。

您的帮助将不胜感激和奖励!提前致谢! :)

回答

2

我会规范化数据库,以便您有一个单独的表和关系表中的标签来连接它。因此:

用户表:

UserId Name 
001 John Does 

TagUserRelation

UserId TagId 
001  001 

标签表:

TagId TagName 
001 Sports 

TagUrlRelation

TagId Url 
001 nba.com 
001 nhl.com 

为了提高性能,我会继续创建带有必要连接的索引视图并实现存储过程以与它们一起工作。

如上所述,另一种方法是全文搜索,但在这种情况下,这将会慢得多并且通常不被认为是好的数据库设计。

+0

谢谢!这就是我也很痛苦。我打算做一个完整的搜索文本,但正如其他人告诉我的,它有点慢。所以再次感谢:) – PinoyStackOverflower

+0

不用担心,祝你好运! ;) – Marcus

0

这可以通过使用full text search

refer here

+0

虽然此链接可以回答这个问题,最好是在这里有答案的主要部件,并提供链接以供参考。如果链接页面更改,则仅链接答案可能会失效。 – Vikdor

+0

确定并感谢FYI – solaimuruganv

1

你应该创建两个单独的表持有单一的标签,一些每个人或交来完成。 如果您愿意,您可以为其创建多列主键。

userID | interest 
001 | sports 
001 | model trains 
001 | hockey 
... 

和职位以同样的方式:

postID | tags 
003 | gossip 
003 | showbiz 
... 

这大大提高您的机会写出高效的SQL。

1

单独存储标签会更好。这样您就可以为标签和两张表格创建一个表格 - 一个用于表示用户和标签之间的关系,另一个表示帖子和标签之间的关系。

users 
---------------------------------------- 
userId | name | password | .... 
    1 | John Doe | $p$fgA  | 

tags 
-------------------- 
tagId | tagname 
1  | basketball 
2  | hockey 

user_interests 
---------------------------- 
id | user_id | tag_id 
1 | 1   | 1 
2 | 1   | 2 

post_tags 
-------------------------- 
id | post_id | tag_id 
1 | 1  | 2 

然后使用JOIN s到获得所需的信息