【问题标题】:Modeling database for a browser game浏览器游戏的建模数据库
【发布时间】:2011-05-05 08:15:42
【问题描述】:

我正在为学校项目开发一个使用 symfony 开发的浏览器游戏。

在我的架构中,我有一个表播放器和一个表库存(包含不同的项目),它们之间存在一对一的关系。

我不确定如何构建餐桌库存。经过反思,我找到了两种方法:

1.

TABLE inventory
  id
  id_player
  item1
  item2
  item3
  ...

但是如果我想在游戏中添加一个项目,我必须在我的表格中添加一个列,如果有很多项目,我就会有很多列。

2.

TABLE inventory
  id
  id_player
  item
  quantity

我觉得这种方式比较好,但是记录的数量会很快增加,因为我是逐项逐个播放的。

还有其他更有效的方法吗?如果不是,两者哪个更好?

【问题讨论】:

  • 这是简单的数据库规范化——第一个结构完全错误——第二个是正确的。

标签: php mysql symfony1 database-design


【解决方案1】:

第二种方法应该没问题,只要 id_player 上有索引。我不会担心它的空间使用情况。如果每行占用 25 个字节,每个播放器有 400 种类型的物品,而您有 100 万用户,那仍然只有 10 个演出。

【讨论】:

  • 他说了什么;)。不用担心磁盘空间(还),担心速度。
  • 是的,我担心的不是磁盘空间,而是检索所选行的时间
  • 我明白了...这肯定比将玩家的物品栏存储在一个单元格中要慢(这可能有效,尽管您的 #2 更优雅),但至少需要最少的上下文切换来获取玩家的物品栏库存(单个选择)。所以这只是搜索 B 树的成本,跟踪每一行的指针并复制数据......我认为它会相当快。
【解决方案2】:

要完成上述答案,您可以添加一个包含您的项目的表格,然后只需将您的 item 列更改为 id_item

TABLE player     
  id
  player_name
  ... player characteristics ...

TABLE inventory
  id
  id_player
  id_item
  quantity

TABLE item
  id
  item_name
  ... item characteristics ...

【讨论】:

  • 如果我这样做,我将拥有user <> character <> inventory <> item。会很慢,不是吗?
猜你喜欢
  • 2012-10-09
  • 2022-06-10
  • 1970-01-01
  • 1970-01-01
  • 2011-10-02
  • 2016-10-22
  • 1970-01-01
  • 1970-01-01
  • 2021-07-31
相关资源
最近更新 更多