2

我正在创建一个游戏网站,该网站将拥有一个游戏中发现的项目数据库(数千个),我想知道数据库结构的最佳实践是什么。

有 5 种物品类型:武器、盔甲、药水、任务物品和垃圾。这些中的每一个都具有不适用于其他项目的独特属性。例如,武器可以是不同的类型(即双手、主手、副手),装甲可以是不同的重量(板、皮)等。

一切都是“项目”,但我想知道我是否应该有一个项目表,即:

item id, item_type ... item_weapon_type_id, item_armor_weight_id

因此在一张表中拥有所有可能的属性。

或为每个项目类型单独的表,即:

weapon_id, weapon_type, weapon_name

我想知道这一点,因为每种项目类型都有许多独特的属性,这意味着单个项目表将有很多列,其中许多列不适用于表中 80% 的项目。

提前感谢您的帮助。

4

3 回答 3

3

我认为拥有一个名为 的项目类型基表将很有用Item-Base-Type,其中包含所有项目类型的共享属性。
每个项目类型(如盾牌)将有一个单独的表(如shield-type)与Item-Base-Type.
Item包含游戏所有项目的表将有一个外键Item-Base-Type
我认为您将需要一些辅助表,例如Effect添加到模型中。
is-quest-item将是Item表的属性。
查看wiki可能会有所帮助。

游戏物品模板

于 2013-09-10T11:59:22.877 回答
2

有两张桌子:

武器

  • 武器编号
  • 描述

武器类型

  • 武器类型 ID
  • 武器编号
  • 描述(一只手,两只手等)

这样,您可以拥有相同的武器,但可以装备一只手或两只手。

分离表将使数据库正常化并提高性能。例如,当您需要基本的可用武器列表时,您不会选择重复行。

于 2013-09-10T08:18:32.237 回答
1

您可以制作两个表:

  1. 项目

    • 身份证 - PK
    • 类型
    • 姓名
    • 一些属性
    • some_other_attribute
  2. item_attributes

    • item_id - PK
    • 属性名 - PK
    • 属性值

将常用属性(例如价格、重量...)放入items表中,将其余属性放入属性表中。

items此外,如果其中的某些字段未用于所有类型,请不要太担心。2-3 个枚举字段应该足以描述物品的类型、装甲“重量”、武器类型等……(至少在我见过的游戏中)。

于 2013-09-10T08:30:07.230 回答