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ポイント)、柔軟なフィールドを許可する必要があるビジネスルールエンジンをもっと検討している可能性があります/metadataおよびプラグ可能なアプリケーションロジック。

1つのメタデータモデルはEntity-Attribute-Valueです。スキーマのないモデルのためのある種のNoSQLソリューションを検討することもできます。どうしても必要な場合を除いて、メタデータモデルの使用はお勧めしません。フロントの可能なすべてのタイプのルールを定義できれば、システムははるかに単純になります。プラグ可能なルールエンジンを構築することは、SOにとっては多すぎます(そして、小さな努力ではありません)。ある種のオープンソースシステムが存在するかどうかを見て回ります。

于 2013-02-12T15:17:37.317 に答える
0

テーブルの詳細がなければ、本当の答えはありません。しかし、ここに1つの可能な方法があります:

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 に答える