一个或多个表用于具有大约70个属性的实体

时间:2014-11-10 11:00:39

标签: mysql sql

我有一个拥有大约70个属性的实体。这是关于游戏中的一场战斗。 攻击者有船只,而后卫有船只和防御单位。 有10种不同类型的船只和10种不同类型的防御单位。可以有0个或更多相同类型的船舶和防御单位。 还有两种类型的资源。

所以我需要为战斗前后各种类型的攻击舰,战斗前后各类防御舰,战斗前后各类防御单位以及战前后的各类资源(总计64个属性)+ id_battle(AUTO_INCREMENT),日期等属性

如果表有70列,是否存在性能问题? 是否有更好的方法来创建它,可能有更多的表?

1 个答案:

答案 0 :(得分:2)

您可以规范化数据。永远不会有一个列shiptype_a和另一个shiptype_b,而是一个包含船类型的表,也可能是其他引用行记录而不是列的记录。

或多或少:

"有10种不同类型的船舶"

  • 这表示表格 ship_types

"以及10种不同类型的防御单位。"

  • 这表示表 defense_unit_types

"可以有0个或更多相同类型的船只和防御单位。"

  • 这表示另外两个表格:发货 defense_units ,或仅仅继续使用这些类型。这取决于你是否想要平等对待一种类型的实例(例如,你是否想要知道它是A类的船在开始时位于东方并且现在位于西方,或者你只是想要知道现在西方有一艘A型船。)

"还有两种类型的资源。"

  • 这可以是桌子或旗帜

"攻击者有船只,而后卫有船只和防御单位[...]所以我需要在战斗前后为每种类型的攻击舰提供属性[...]"

  • 所以每场比赛有一名攻击者和一名后卫。而且似乎你想要存储所有游戏步骤(所以你可以稍后回滚到之前的情况呢?)。

这将导致以下表格:

  • 游戏(game_id,...)
  • attacker_ship (game_id,step_no,ship_id)
  • defender_ship (game_id,step_no,ship_id)
  • defender_defense_unit (game_id,step_no,defense_unit_id)

或者没有船舶和防御_unit_table:

  • 游戏(game_id,...)
  • attacker_ship (game_id,step_no,ship_type_id)
  • defender_ship (game_id,step_no,ship_type_id)
  • defender_defense_unit (game_id,step_no,defense_unit_type_id)

如果它是一个包含国际象棋等64个字段的棋盘游戏,那么你可以存储整个棋盘,但你通常只会存储单个字段而不是64个字段的字段(fields1_is_what,field1_attacker_ship_id,field1_defender_ship_id,field1_defender_defense_unit_id, field2_ ...)。这与性能无关,但更多的是处理数据库以及如何编写查询。