2011-01-09 45 views
3

我正在爲論壇類應用程序設計數據庫。用例涉及爲用戶顯示未讀主題。所以,我需要跟蹤每個用戶ID的每篇文章的讀取/未讀狀態。數據庫設計跟蹤自上次訪問以來的更新

我有用戶和帖子表。我想我應該用userid和postid創建'Read_Posts'表,所以我可以添加每個用戶看到的表中的每個帖子。但隨着時間的推移,這張桌子將變得非常龐大。

任何其他替代方法?

謝謝!

+0

的ID我想你可以創建一個包含表POST_ID和其中包含逗號分隔的用戶ID的字符串另一列。這樣你至少可以最小化表中的行數。 – 2011-01-09 15:45:52

+0

@Harry - 並增加查詢的複雜性。更不用說使它們更昂貴。 – Oded 2011-01-09 15:47:11

+0

@Oded:它不會增加查詢的複雜性。只需增加編碼邏輯的複雜性即可對數據進行操作。而且按照我認爲從逗號分隔的字符串獲取ID數組並不困難。這也有助於在查詢中寫入「where user_id in('這裏我們可以直接獲得逗號分隔的字符串')」。 – 2011-01-09 15:49:45

回答

2

您的設計看起來是正確的。

你也許可以考慮這個功能到期 - 也就是說,任何超過一週(或任何)的帖子都可以從這個表中刪除(不論是否存檔)。

或最高的每用戶10分未讀的帖子...

1

你能以某種嘗試以某種方式壓縮的信息。只有當用戶登錄時,您才需要向用戶顯示他是否閱讀了帖子,因此您應該將信息存儲在用戶附近的某個位置。用戶可能會以日期排序的方式查看自己的帖子,因此近日期的讀後信息應該在附近,以便高效地緩存和讀取許多值。

嘗試表與此stucture:

  • USER_ID
  • postmonth
  • readposts_array

取決於你希望有多少帖子,您可以使用一週或一天,而不是一個月。如果您在應用中緩存該值,則在顯示很多帖子時可能會看到性能提高。

0

對於每個用戶,您可以在註銷時(或每次採取的操作)存儲最大的post_id。然後,當他們返回時,任何id大於此值的帖子都會被標記爲新的。

它沒有考慮他們上次訪問時沒有閱讀的帖子,但會提供自上次訪問以來新增的活動的簡單指標。它只需要在用戶表上添加一個額外的列,所以應該是相對較低的影響。

這假定員額遞增整數作爲他們的課程