Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MySQL中保存排名_Mysql_Sql_Ranking - Fatal编程技术网

在MySQL中保存排名

在MySQL中保存排名,mysql,sql,ranking,Mysql,Sql,Ranking,我计划每天计算一次区域和全球排名。将有多个排名,每个都基于评级或统计数据 保存这些球员排名的最佳方法是什么?为每个单独的统计数据创建一个包含玩家ID、区域排名和全球排名的表,还是创建一个包含许多列的排名表更好?第二个选项将导致某些行具有空列,因为玩家可能没有该特定属性 另外,保存每日排名的最有效方法是什么,以便能够创建一个显示球员进步的图表?如果我决定不创建图表,我只需在创建新表格之前删除表格。只需创建一个带有playerId和date主键的表格,并为每个统计添加一列。然后,您可以轻松分析该表格

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

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


另外,保存每日排名的最有效方法是什么,以便能够创建一个显示球员进步的图表?如果我决定不创建图表,我只需在创建新表格之前删除表格。

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

或者,您可以创建两个表格: 1-排名表(玩家id、日期、排名id、排名) 2-排名类型(排名id、描述)


这与前面的答案基本相同,但您可以添加或删除排名类型,而无需更改排名表,这取决于您的应用程序的动态程度。问题的中心是如何使用数据以及性能要求

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

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

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

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

根据你所说的,我会使用非正规化的,每名球员一行,多个统计数据的方法。你可能想看看一个球员长什么样,数据就在那里,没有额外的处理,除非你有很多很多球员或者很多很多统计数据