用于跟踪用户的得分历史的数据库表

时间:2016-08-29 18:14:27

标签: javascript node.js mongodb database

我有一个数据库表User

数据库表中的每个用户都有一个字段score

我想说明用户的分数是如何随时间变化的。

如何存储此分数?我应该创建一个包含字段ScoreuserIdscore的独立数据库表timestamp吗?

我是否仍然要在用户表中保存排名,还是将排名存储在Score表中?我应该使用字段currentScoreId或指向分数据库表中行的某些内容吗?

我正在使用MongoDB,因此使用关系查询并不容易,但我认为将排名存储在单独的数据库表和用户表中似乎很愚蠢。

3 个答案:

答案 0 :(得分:2)

如果每个用户的得分列表不是那么大,您可以考虑使用这样的架构:

List<Request> requests = new LinkedList<Request>();
requests.add(1, new ArgumentRequest("-R")); 
requests.add(new CommandRequest("ls\n"));
client.processRequests(requests);

MongoDB中的数据库建模是不同的。与传统的关系数据库一样,您没有简单的表连接。

截至排名时,您想将其另存为单独的字段吗?我认为即使使用传统的数据库,也很难更新数据库中的所有排名。所以上面我添加了一个{ 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" }, ... ] } 字段,您可以根据该字段进行排序,并动态生成排名。

答案 1 :(得分:0)

彼得给出的答案对许多情况都有好处,但如果有无限数量的分数(超过16MB /文件),请考虑以下链接

https://docs.mongodb.com/manual/tutorial/model-referenced-one-to-many-relationships-between-documents/


否则这是一个很好的方法:
https://docs.mongodb.com/manual/tutorial/model-embedded-one-to-many-relationships-between-documents/

答案 2 :(得分:-1)

这里我假设您的表(用户)看起来像:

用户=列(userId,得分) 创建名为as的单独表 user_audit =列(identifierPK,userId,得分,时间戳) 在用户表上写入触发器以填充用户审核历史记录。

在这里,您可以添加另一列用户表并跟踪其历史记录。

另一种选择是:

UserScoreAudit = columns(user_id,oldScore,newScore,timestamp)

通用审核表=列(actorId,oldValue,newValue,tableName,fieldName,timestamp)