寻找这个桌上足球游戏数据库设计的帮助/验证

时间:2017-10-25 17:37:38

标签: sql database postgresql database-design relational-database

我正与我的同事一起开展一个有趣的项目,将我们的桌上足球桌带入数字世界。我们已经将传感器连接到桌面以跟踪得分,并且我们正在添加玩家在比赛时登录的能力,并且我们将跟踪一些统计数据。我们设计了一个数据库模式,并希望对我们所做的事情进行一些验证,或者澄清我们需要改变的内容。任何意见都将不胜感激!

我们计划跟踪玩家,游戏和游戏历史。我们主要使用游戏历史表作为跟踪游戏中有多少玩家的方式(2或4)。我们也希望跟踪玩家所玩的任何系列,尽管不是每个游戏都是一个系列。

Foosball Database Design

1 个答案:

答案 0 :(得分:1)

我看了你的设计,我有几个评论:

  • 球员

    • TotalTimedPlayed,GameWins,TotalGamesPlayed,SeriesWins,TotalPoints 和截止都可以从数据中计算出来。
    • 我不想存储您可以从表格中的查询中获取的数据, 因为这些趋势与时间不同步。
  • 游戏

    • 不再需要“单一”布尔值,我认为这是理所当然的 只识别一个玩家的游戏?
    • WinMargin和Winner,再次计算。
  • 系列

    • 可以计算NumGames。

所以我设定了以下架构。 enter image description here

为什么选择球队?

  • 如果你有4名球员,他们会以2比2的比分打球。只有2名球员,你有单人球员。
  • 我的第一个模型将玩家直接链接到游戏,但事实证明很难计算GameWins。防爆。有4名玩家,我无法宣布得分最高的用户是赢家,因为有2名用户拥有相同的分数。更容易宣布团队成为胜利者。
  • 如果玩家经常一起玩,他们可以积累团队统计数据。
  • 但你可以不用,并直接将玩家链接到游戏。但是会让一些查询变得更复杂。

计算不同的值:

  • TotalTimePlayed :Games.EndTime - Games.StartTime适用于团队中包含玩家X的游戏。
  • GameWins :计算(游戏)游戏,其中玩家X的团队得分高于其他团队。
  • TotalGamesPlayed :计算(游戏)游戏,其中玩家X的团队与游戏相关联。
  • SeriesWins :与系列Y相关联的计数(游戏),其中玩家X的团队得分高于其他团队。
  • TotalPoints :来自玩家X参赛队伍的游戏的总和(得分)。
  • 结束:计数(游戏),其中玩家X的团队得分> 0和另一支队伍得分== 0。
  • NumGames :count(Series_has_Games)其中GameId = X

玩得开心!