2012-10-09 93 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到獲得所需的信息