2013-08-24 92 views
1

我想在每個Q &頁面上做一個像stackoverflow一樣的評論線程。我看到的問題是如何通知每個訂閱者(提問者,回答者,評論者)的新評論,允許他們每個能夠將評論標記爲已讀。類似於Stackoverflow的評論數據庫模式

我看到2級通用的解決方案:

  1. 做一排每個用戶,複製這些行中的每一個實際的評論。這將允許每個訂閱者在每行中的一個字段將該評論標記爲已讀(從頁面頂部的小紅圈消除)。
  2. 只有每行評論。用戶將被集中到一個單獨的字段中,並且必須有一些複雜的查詢來選擇和更新每個用戶是否已將該評論標記爲已讀。

也許有更好的辦法嗎?

這裏有一個通用的架構顯示第二方法,使答案可以有一些指:

Comments table 

comment_id user_id question_id  comment  comment_read 
1   1   1  good stuff  yes=user_id=1, no=user_id=2, no=user_id=3 
2   2   1  bad stuff  yes=user_id=1, yes=user_id=2, no=user_id=3 
3   3   1  worse stuff  yes=user_id=1, yes=user_id=2, yes=user_id=3 
4   4   2  good question ... 
5   1   2  bad question ... 

回答

2

它看起來好像comment_read列第二做法是過於密集。如果線程上有一千條評論會怎麼樣?

當你面對這些類型的問題時,你想要考慮透視......你如何最頻繁地查詢數據?你會想要定製架構。您可能會根據用戶登錄進行查詢:應該通知用戶哪些新評論?

爲什麼不那麼容易,除了評論表之外,還有一個評論/用戶表。

user_id comment_id is_read 
1  1   yes 
2  1   no 
3  1   no 
1  2   yes 
2  2   yes 
3  2   no 
... 

這樣,該查詢以確定用戶的未讀評論是相當容易的(例如選擇其中is_read = no和USER_ID = 1)。從評論/問題的角度來看,也很容易得到未讀評論的列表。

相關問題