0

完成以下任务的最佳方式是什么:我可以通过 API 访问一些玩家信息。我现在想在 sql 数据库中保留使用玩家信息计算分数的方式。一个人将如何做到这一点?

例如:

我想根据 RushingYards: Int、Touchdowns: Int 和 Interceptions: Int 计算分数。几乎,我想创建一个具有以下规格的评分系统:

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

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

谢谢。

4

2 回答 2

1

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

我只需将从 API 检索到的数据存储在数据库中。如果 API 高度可用并且我可以随时(再次)获取数据,我什至可能不会这样做。

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

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

这被过度简化了,但你明白了。

如果规则可以随时更改,并且规则的类型也可以更改(例如,每次教练对裁判大喊大叫时 1 分),您可能正在寻找更多的业务规则引擎,它必须允许灵活的字段/元数据和可插入的应用程序逻辑。

一种元数据模型是Entity-Attribute-Value。您还可以考虑为无模式模型提供某种 NoSQL 解决方案。除非绝对必须,否则我建议不要使用元数据模型。如果您可以定义所有可能的前端规则类型,那么系统将变得更加简单。构建一个可插拔的规则引擎对于 SO 来说太过分了(而且不是一件小事)。我会环顾四周,看看是否存在某种开源系统。

于 2013-02-12T15:17:37.317 回答
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 ...

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

于 2013-02-12T15:10:18.507 回答