2016-08-29 74 views
0

我有一個數據庫表User用於跟蹤用戶評分歷史的數據庫表

數據庫表中的每個用戶都有一個字段score

我想展示用戶的得分如何隨時間變化。

如何存儲此分數?我應該創建一個獨立的數據庫表Score與字段userId,score,timestamp

我仍然應該在用戶表中保存排名,還是足以將排名存儲在Score表中?我是否應該有一個字段currentScoreId或指向樂譜數據庫表中的某一行?

我正在使用MongoDB,所以它不是那麼容易使用關係查詢,但我認爲它似乎愚蠢的存儲在一個單獨的數據庫表和用戶表中的等級。

回答

-1

我在這裏假設你的表(用戶)的樣子:

用戶=列(用戶ID,分數) 創建稱爲 user_audit =柱(identifierPK,用戶id,評分,時間戳單獨的表) 在用戶表上寫入觸發器以填充用戶審計歷史記錄。

在這裏您可以添加用戶表的另一列並追蹤其歷史記錄加班。

另一種選擇是:

UserScoreAudit =列(USER_ID,oldScore,newScore,時間戳)

通用審計表=列(的actorId,屬性oldValue,NEWVALUE,表名,字段名,時間戳)

2

你可能會考慮有這樣一個模式,如果得分爲每個用戶的列表是沒有那麼大:

{ 
    userId: "String", 
    currentScore: { // this would be the copy of the most recent score 
     score: "Integer", 
     timeStamp: "Date" 
    }, 
    scores: [ // an array of all scores of this user 
     { 
      score: "Integer", 
      timestamp: "Date" 
     }, 
     ... 
    ] 
} 

MongoDB中的數據庫建模有所不同。您不像傳統關係數據庫那樣有簡單的表連接。

作爲排名,你想保存它作爲一個單獨的領域?我認爲即使使用傳統數據庫,也很難更新數據庫中的所有排名。因此,上面我添加了一個currentScore字段,您可以根據該字段進行排序,並即時生成排名。