评分系统的SQL数据库模型

时间:2013-02-12 15:06:02

标签: sql postgresql scala

完成以下操作的最佳方式是:我可以通过API访问某些播放器信息。我现在想在sql数据库中坚持使用播放器信息计算分数的方法。如何实现这一目标?

例如:

我想根据RushingYards计算分数:Int,Touchdown:Int和Interceptions:Int。差不多,我想创建一个具有以下规格的评分系统:

1 point for every 25 RushingYards,
3 points for every Touchdown
2 points for every Interception

在纯代码中编写这个很简单,但是如何将它放在SQL DB中,因为我需要多个动态创建的“评分系统”?最后,我想检索持久化数据并使用它来计算Scala中的分数。

感谢。

2 个答案:

答案 0 :(得分:1)

很难在没有一些假设的情况下明确回答,但我会做出这些假设并尝试。

我只是将从API中检索到的数据存储在数据库中。如果API具有高可用性,我甚至可能不会这样做,而且我可以随时获取数据。

如果规则很简单并且仅限于您概述的内容(加上有限数量的附加规则或规则类型),您只需将规则编码到应用程序逻辑中,并拥有一个表,其中存储规则输入。例如,规则输入表可能类似于:

RuleInputs
------------------------ 
RuleInputId 
LeagueId 
NumPointsPer25Yards 
NumPointsPerTouchdown 
NumPointsPerInterception 
NumPointsPerSack

这是过分简化,但你明白了。

如果规则可能随时发生变化,并且规则类型也可能发生变化(例如,每次教练对裁判都大喊大叫时都会有1分),那么您可能正在考虑更多的业务规则引擎,允许灵活的字段/元数据和可插入的应用程序逻辑。

一个元数据模型是Entity-Attribute-Value。对于无模式模型,您还可以考虑使用某种NoSQL解决方案。我建议不要使用元数据模型,除非你绝对必须这样做。如果您可以定义前面所有可能的规则类型,那么它将导致更简单的系统。构建一个可插拔的规则引擎对于SO来说太过分了(并且不是一个小小的尝试)。我会看看是否存在某种开源系统。

答案 1 :(得分:0)

没有表格的任何细节,没有真正的答案。但这是一种可能的方式:

SELECT 
   SUM(CASE type
       WHEN 'RushingYards' THEN (FLOOR(yards / 25))
       WHEN 'Touchdown' THEN 3
       WHEN 'Interception' THEN 2
   ) AS points
FROM player_actions
GROUP BY ...

一旦你弄清楚你的表模式应该是什么,查询就会自然流动。

相关问题