我目前正在构建一个应用程序,可以根据他们的标签推荐网站。
在我的网站上,当用户注册时,它会填写一个兴趣。所以这是一个样本兴趣:
football, model trains, hockey所以用逗号隔开。因此,当用户单击注册时,它将保存在我的数据库中。这是我的数据库的设计。
userID | name | interest
001 | John Doe | sports, model trains, hockey因此,另一方面,我的网站中也有用户上传网站URL,并创建与之相关的标签。这是我为此而设计的数据库:
postID | title | tags
001 | techcrunch.com | technology,softwares,startups
002 | nba.com | basketball,sports,all-star
003 | tmz.com | gossip, showbiz所以这篇文章的逻辑是,我想向用户John Doe推荐NBA.com,因为NBA.com有一个运动标签,John Doe的兴趣也有一个体育标签。
你知道怎么做吗?只是一个后续问题,数据库设计是否正确,或者我是否应该创建一个新表来存储所有标签。类似的东西(虽然不确定)。
我们将非常感谢您的帮助,并将给予您回报!提前感谢!:)
发布于 2012-10-09 15:35:43
我会对数据库进行规范化,这样您就可以在单独的表和关系表中拥有与其连接的标记。因此:
用户表:
UserId Name
001 John DoesTagUserRelation
UserId TagId
001 001标签表:
TagId TagName
001 SportsTagUrlRelation
TagId Url
001 nba.com
001 nhl.com为了提高性能,我会继续使用必要的连接创建索引视图,并实现存储过程来使用它们。
如上所述,另一种选择是全文搜索,但这会慢得多,而且在这种情况下通常不会被认为是好的数据库设计。
发布于 2012-10-09 15:34:43
这可以通过使用full text search来完成
refer here
发布于 2012-10-09 15:35:22
您应该创建两个单独的表,其中包含单个标记,每个人或每个帖子都有多个标记。如果愿意,您可以为它创建一个多列主键。
userID | interest
001 | sports
001 | model trains
001 | hockey
...对帖子也是如此:
postID | tags
003 | gossip
003 | showbiz
...这极大地提高了您编写高效SQL的机会。
https://stackoverflow.com/questions/12794943
复制相似问题