2013-02-12 55 views
0

完成以下操作的最佳方式是什麼?我可以通過API訪問一些玩家信息。我現在想在一個sql數據庫中堅持用玩家信息來計算分數的方法。如何做到這一點?用於評分系統的SQL數據庫模型

例如:

我想計算基於RushingYards分數:詮釋,達陣:int和攔截:詮釋。好看多了,我想建立一個記分系統具有以下功能:

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

純代碼編寫,這是簡單的,但我怎麼可以把這個在SQL數據庫,因爲我需要多,動態創建的「得分王系統「?最後,我想回顧持續的數據,並用它來計算Scala中的分數。

謝謝。

回答

1

如果沒有一些假設,很難做出明確回答,但我會做出這些假設並嘗試。

我只是將從API中檢索到的數據存儲在數據庫中。如果API的可用性很高,我甚至可能不會這樣做,並且我可以在任何時候再次獲取數據。

如果規則很簡單並侷限於您所概述的規則(加上有限數量的其他規則或規則類型),那麼您只需將規則編碼到應用程序邏輯中,並擁有一個規則輸入爲存儲。例如,規則輸入表格可能類似於:

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

這太過簡單了,但您明白了。

如果規則隨時可能發生變化,規則的類型也可能發生變化(例如,每次教練大喊大叫1點),那麼您可能正在考慮更多的業務規則引擎,允許靈活的字段/元數據和可插入的應用程序邏輯。

一個元數據模型是Entity-Attribute-Value。您也可以考慮採用某種無模式模型的NoSQL解決方案。除非你絕對必須,否則我會建議不要使用元數據模型。如果你可以定義所有可能的正面規則類型,它將導致一個更簡單的系統。構建可插拔的規則引擎對於SO來說太多了(並且不是一個小小的嘗試)。我會看看是否存在某種開源系統。

+0

你知道關於你在最後一段中的內容嗎? – DarkSensei 2013-02-12 15:24:50

+0

在我的回答結尾添加了一些信息。 – 2013-02-12 15:30:55

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 ... 

一旦你計算出你的表模式應該是什麼樣的查詢會自然流出。