2010-11-27 234 views
1

我目前正在開發一個小應用程序,用戶通過完成任務累積積分。我想提供一些關於設計我的數據庫表的最佳方法的建議。在某些方面,系統類似於SO,用戶完成任務(在你的答案問題上),然後他們的觀點平衡被更新。在數據庫中存儲用戶積分系統的最佳方式

我目前有一個用戶表,存儲通常的用戶信息,但不知道如何把它轉發。

我最好有一個積分表(用戶有很多積分),然後添加user_id和點數量;那麼當查詢用戶點數時,用給定的user_id拉出所有點數並求和它們?

有沒有更有效的方法來做到這一點?

感謝,

傑克

回答

1

加分表格是一個公平的方法,因爲它允許跟蹤獲得積分的原因。根據用戶數量,點數交易和使用的服務器數量,我會考慮持有一些常用的總量:最常見的是用戶總點數。

要在點表中插入新點記錄,您可以使用一個存儲過程,該存儲過程不僅將點記錄在點表中,還會增加每個用戶的點聚合。此聚合可以保存在用戶表中的單獨列中(如Oded所建議的)。

隨着您的設計的進步,可能會出現可用於預先計算的新的有用聚合。

但要保持簡單:只有在絕對必要時才使用這些聚合,例如計算用戶的總點數需要很長時間。對於一個小型系統來說,這實際上不應該成爲一個動態計算這些總數的問題。

1

如果points沒有沒有用戶任何意義,並且與它一比一的關係,我會直接把田野上user表。

但是,如果你是記錄不同類型的每個用戶的點,我會創造一個points_type查找和points表鍵合到userpoints_type IDS。

+0

感謝您的答覆 - 我打算使用添加一個新的條目,每次用戶在積分表中獲得積分時。因此,這將是一對多的關係。我認爲將這兩種方法組合在一起存儲在users表中可能是明智的。 – Jack 2010-11-27 17:13:10

3

如果您只關注點總數,則按照Oded的建議,只需將該字段直接包含在User表中即可。但是,如果您需要知道如何獲得這些積分,也許您可​​以擁有一張積分交易表。該交易表然後可以具有到User表的user_id字段和各種字段的外鍵,例如Action,Points,Date

上午我最好能有一分表(用戶 有許多點)

用戶爲什麼會擁有多少分?如在與各種類別相關的點?正如Oded也提到的那樣,這歸結於這些觀點的含義以及你想知道的關於他們的信息(也就是與獲得它們或對他們產生影響的用戶有關,即投票答案會減少發佈用戶的積分)。