0

我计划每天计算一次区域和全球排名。会有多个排名,每个排名都基于评级或统计数据。

保存这些玩家排名的最佳方法是什么?为每个单独的统计数据创建一个表格,每行包含 playerID、区域排名和全球排名,还是创建一个包含很多列的单个排名表会更好吗?第二个选项将导致某些行具有空列,因为玩家可能没有该特定统计数据。

此外,保存每日排名以创建显示玩家进度的图表的最有效方法是什么?如果我决定不创建图表,我将在创建新表之前删除表。

4

3 回答 3

0

或者,您可以创建两个表: 1- Ranking table (player_id,date,rank_id,rank) 2- Ranking_type (rank_id,description)

与上一个答案基本相同,但您可以添加或删除排名类型而无需更改排名表,这取决于您的应用程序的动态程度

于 2013-04-19T12:35:09.700 回答
0

问题集中在如何使用数据和性能要求上。

如果您遇到几乎所有玩家都拥有几乎所有统计数据的情况,并且您的应用程序同时使用所有统计数据,那么从性能角度来看,这是不费吹灰之力的。您希望将它们存储在一个表中,这样您就不会产生每个统计数据的额外“playerid”开销,以及将数据组合在一起所需的连接。

在另一个极端,如果大多数统计信息都是空的,并且应用程序一次只使用一个统计信息,那么带有“playerid”、“statid”、“value”的单个表是一个好方法。

第二种方法是实体属性值 (EAV) 模型的示例,当您需要添加新的统计数据时也非常有用。但是,您希望每天重新创建一次所有值,并且没有提及历史要求。在您的情况下,这种好处并不明显。

您将单独的值存储在单独的表中的选项可能不是最好的方法,特别是如果所有统计数据都具有相同的表示(即一个数字)。增殖表通常是一个坏主意。一个例外与访问控制有关。如果您对每个统计数据都有单独的安全要求,那么将它们存储在单独的表中可能会使安全性更容易实现。

根据你所说的,我会采用去特征化的、每名球员一排、有很多统计数据的方法。你可能想看看球员长什么样,数据就在那里,没有额外的处理,除非你有很多很多的球员或很多很多的统计数据。

于 2013-04-19T13:33:20.127 回答
0

只需在 playerId 和 date 上创建一个具有主键的表,并为每个统计数据添加一列。然后,您可以轻松分析该表上的任何内容。

于 2013-04-19T12:00:51.077 回答