游戏设计 - 玩家数据 - 我这样做了吗?

时间:2013-01-24 22:53:26

标签: java database jdbc game-engine

我使用JDBC / Derby存储我正在编写的益智游戏的高分数据。由于游戏的性质,能够根据过滤器查看高分数据(即向我显示此级别的最高分数,显示此计算机上的最高分数等)将非常有用。

此游戏还具有“广告系列”模式,即玩家可以实现目标并解锁成就。

目前,广告系列数据存储在我写入磁盘的Serializable java文件中。

但是,由于高分数据存储在数据库中,并且因为高分表中的PlayerID将链接到活动文件,所以我觉得我也应该将活动数据存储在数据库中。 / p>

我面临的问题是我无法打破数据。在我看来,“玩家”表将是一百+宽,每列代表一个目标或成就的状态。

我不是数据库人。我不知道这是不是很糟糕的设计。我已经阅读了关于普通表格1-5的内容,我相信我遵守了每一种形式,但我怀疑我做错了什么。

我真的想要数据库中的高分,并且它们非常适合。然而,作为一个副作用,我感觉强烈推动将广告系列/其他信息存储在数据库中。将一些数据写入文件以及将其他数据写入数据库感觉很奇怪,尤其是当这两个数据相互引用时。

我做错了什么吗?只要它实际上遵循正常形式,是否可以拥有一个包含一百或两列的表?

1 个答案:

答案 0 :(得分:2)

如果Player表中的大多数列代表目标或成就的状态,您可以考虑重复数据并在子表中对其进行建模。

Player Table
PlayerId (primary key)
PlayerName

Goals Table
GoalId (primary key)
GoalName

PlayerGoals Table
GoalId (primary key, foreign key to Goal)
PlayerId (primary key, foreign key to Player)

Goals表是一个主列表,您在编写游戏时设置一次。 当玩家获得某些东西时,你会在PlayerGoals中插入一行。

您应该根据预期的用例对数据建模。以这种方式对其进行建模(与多列Players表相比)将使这些类型的查询更容易编写: -

  • 列出玩家以及他们完成了多少目标
  • 大多数玩家已经完成了哪个目标?
  • 通常用于处理目标的任何其他查询

添加目标会更容易,因为它会在Goals表中插入行而不是添加列。但是,也许你需要编写一堆代码,这没有任何意义。

另一方面,如果你有一个包含许多列的大型平面播放器表,这些类型的查询会更容易: -

  • 获取有关特定播放器的所有信息
  • 列出已完成目标X的每位玩家
  • 列出已完成目标X而非目标Y
  • 的每位玩家

最后,您需要选择是否要在数据库中明确建模的Goals概念。什么是对错取决于你的优先事项。