多种游戏变体的数据库设计

时间:2011-06-02 01:48:49

标签: mysql sqlite database-design relational-database entity-relationship

希望这些表格的目的很明显,但以下是一个简单的解释:我基本上希望存储匹配结果(8球池等),但也要逐帧记录结果。我遇到问题的地方是我打算在我的应用程序增长时允许不同的游戏类型,因此,每个框架内使用的评分系统会有所不同。我认为下面的解决方案可行,但对我来说似乎并不合适,所有建议都值得赞赏。

是否有比使用下表更明智的方法:

#Persers

  • ID
  • 名称
  • 昵称

#NormalMatches

  • ID
  • playerA
  • playerB

#NormalFrames

  • ID
  • match_id
  • playerAWon(BOOL)

#ScoringPoolMatches

  • ID
  • playerA
  • playerB

#ScoringPoolFrames

  • ID
  • match_id
  • playerA_cue_ball_potted
  • playerB_cue_ball_potted
  • playerA_balls_potted
  • playerB_balls_potted
  • playerA_balls_remaining
  • playerB_balls_remaining

(编辑:修改ScoringPoolFrame表以更好地了解问题所在。)

非常感谢。

2 个答案:

答案 0 :(得分:1)

我不确定你的普通比赛表和你的得分池比赛之间有什么不同.... 我会把事情设置得有点不同,一张桌子可以得到一场比赛的最终赢/输结果,一张桌子可以对所有比赛/帧进行评分。 (*表示主键字段)

球员

  • id *
  • 名称
  • 昵称

匹配

  • id *
  • playerA
  • playerB
  • winning_player_id

游戏

  • match_id *
  • game_id *
  • player_id
  • 得分

game_id将是保龄球中的帧数,或网球中的一组数字,或棒球中的一局

你可能甚至想把匹配表变成这样的东西:

匹配

  • match_id *
  • player_id *
  • 获胜者(布尔)

这样您就可以选择某个玩家的所有匹配而无需搜索两列。你也可以在游戏中有两个以上的玩家。

答案 1 :(得分:0)

指导原则:少即是多。在这种情况下,较少的表=好。

匹配是匹配,框架是框架,所以......

  • 合并" NormalMatches"和" ScoringPoolMatches"将表格放在一起并引入一列is_scoring boolean来区分
  • 合并" NormalFrames"和" ScoringPoolFrames"简单地表格#34;框架" (id,playerA_score,playerB_score),但只需分配" 1"获胜和" 0"对于正常比赛的损失。然后,您对所有帧的赢/输计算都是相同的。

创建视图以捕获计算逻辑,例如

CREATE VIEW FRAME_RESULT AS
SELECT
    id,
    playerA_score > playerB_score as playerAWon,
    playerB_score > playerA_score as playerBWon,
    playerA_score = playerB_score as is_draw
FROM Frames