2011-12-03 32 views
0

在我的數據庫中有2個表格:「books」和「users」。我在頁面上顯示所有書籍,並希望用戶點擊一個小鏈接「我讀過這個」,類似於帶有狀態的Facebook的Like函數。用戶可以點擊他們閱讀該書或點擊「未讀」該書。其他用戶登錄也可以看到誰讀了什麼。我在質疑我的方法,並希望獲得有關其他方向的反饋意見。複製Facebook的「喜歡」功能

我腦子裏想的是什麼有一個場,在「用戶」表中,可能像「books_read」,其中我將存儲值(book_id的)的陣列。在顯示所有書籍的前端,我會查詢「books_read」字段,如果某個值與當前的book_id匹配,那麼該書下面的內容就會類似於「用戶X已閱讀此內容」。

總之,我會在「users」表中存儲一個「book_id」數組,以收集每個用戶讀過的書籍。我會拉這個數組,並將ID與每個查詢的書進行比較,如果匹配,那麼用戶已經閱讀該書的輸出。

我錯過了什麼,或者可能沒有看着更清潔的方法?

回答

1

在RDBMS比如MySQL,它很少會是一個好主意來存儲列表中的一個字段,尤其是當你知道你會在列表中尋找特定片以後。通過這樣做,數據庫無法利用索引。

相反,您應該製作一個鏈接用戶和書籍的附加表格。或者,您可以將其稱爲* users_books *並將讀取爲到其自己的列中。

users_booksread 
----------- 
user_id 
book_id 
+0

完美的是,這種方法讓我大跌眼鏡。更有組織。謝謝! – cqde

1

創建一個單獨的表格,可能被稱爲book_read

其中,對於用戶喜歡的每本書,存儲user_idbook_id

然後你不必亂陣列來處理,一切都是標準化的,你的設計將是更清潔,和你的數據庫更靈活。另外,你的用戶表不會有一堆額外的粗暴的東西,它會以不幸的方式影響性能。