2010-12-11 185 views
8

我有一個照片庫。我想添加「添加到收藏夾」按鈕 - 所以用戶可以添加其他用戶到他/她的收藏夾。然後我希望每個用戶都能夠觀看他最喜歡的用戶列表,並且能夠觀看誰(用戶列表)將該用戶添加到收藏夾。在MySQL中存儲用戶「收藏夾」的最佳方式

我發現兩種方法,第一是:​​

faver_id faved_id 
1  10 
1  31 
1  24 
10  1 
10  24 

我不喜歡,因爲 1)中有很多是未來重複2)非常大的表(如果有至少1001級的用戶的這種方法,每個人都喜歡其他1000個用戶= 1 001 000條記錄),我想這會減慢我的基數。

第二種方式是:

user_id favs 
1   1 23 34 56 87 23 
10   45 32 67 54 34 88 101 

我可以,如果用戶喜歡通過MySQL查詢select count(user_id) from users where favs LIKE '% 23 %' and user_id=10;

其他一些用戶把這些的收藏和爆炸()他們在PHP或搜索,但我覺得第二種方式在MySQL中並不是很「正確」。

你能給我些建議嗎?

回答

13

想想這個。您反對使用第一種方法的觀點是您的表格可能會變得太大,但是您繼續說,如果您使用第二種方法,則可以運行通配符查詢來查找包含的東西。

第二種方法強制全表搜索,並且是不可索引的。採用第一種方法,您只需在每個列上打上索引,然後就可以開始了。第一種方法很大,,比第二個好。由於縮放似乎是你唯一關心的問題,我認爲答案很明顯。

用第一種方法。多對多的表格在任何地方都可以使用,並且有很好的理由。

編輯:

另一個問題是,第二種方法是移交了很多工作,在維護數據庫關閉的應用程序。在某些情況下,這沒問題,但您談論的情況是數據庫擅長於 at。你只會重新發明輪子,而且不好。

+0

非常感謝這樣清楚的解釋。是的,我忘了我可以在第一種情況下添加表索引,它將解決數千條記錄的問題。 – oyatek 2010-12-11 17:53:39

+0

@oyatek:沒問題。我很樂意提供幫助。 – AgentConundrum 2010-12-11 20:46:25

1

那麼,第二種方式並不是那麼容易,當你想刪除或做出更改,但它的MySQL就其所有權利。 雖然,Joomla甚至在同一個字段中包含不同日期的信息,稱爲params