2008-11-17 99 views
2

確定用戶是否查看過一段數據的最佳方法是什麼,即如何更新評論。這兩種方案我也想過是這些....確定用戶是否查看過數據的最佳方法

  1. 使用具有一排每個用戶所查看的數據ID和插入時,該項目最後看一個單獨的表。

  2. 使用同一個表並在項目發生更改時爲每個用戶添加一行,並在用戶實際查看數據時刪除該行。

兩種方法解決這個問題,但在溶液中2表的最大行數將在最壞的情況是相同的解決方案1,沒有人看到任何東西,最好有0行,一切都已經看到。我知道在解決方案2中,您無法確定它何時被查看。

想法?

編輯:我正在使用評論更新作爲示例。在實際應用中,新用戶不需要查看或讀取舊數據。他們剛加入,對他們來說沒有任何意義。

回答

3

它一定是選項1:

表1(評論)

  • COMMENT_ID
  • 評論

表2(comment_view)

  • COMMENT_ID
  • user_id說明

選項2將無法工作,因爲每一個新用戶將有充分的現有註釋 「標記爲已讀。」

3

您是否需要知道他們何時或多少次查看了一條數據?

如果不是,我會保留一個FK表的數據更新和FK給用戶。然後進行簡單的檢查,看看他們認爲:

select count(*) from DataAlerts where dataid = 1 and userid = 1 

的數據和用戶數據更新時插入記錄。

當用戶查看刪除該用戶時。

2

選項1在這裏是更好的方法 - 通常,刪除一些東西來表明發生了什麼事是在數據庫中做事的一種奇怪的方式,正如ng.mangine所指出的,它甚至不會工作(除非你每當有新用戶時,向該表添加行,但這幾乎肯定會成爲瓶頸和性能問題 - 考慮當您有一百萬條評論和新用戶加入時發生的情況)。

選項1更清晰;只有在遇到性能問題時才考慮更改它(或者如果您事先知道您的流量需要更優化的策略,例如每個主題上的位向量表示每個系統用戶的讀/未讀)。

1

方案2是做事,一個不尋常的方式這在數據庫領域是說它威力工作的一種方式,但它可能是最好的去與像一個選擇更傳統的方法1.

相關問題