如何在关系数据库中为可用库存/对象/项目(例如武士刀)建模多个“使用”(例如武器)

时间:2010-11-21 04:18:39

标签: database architecture tagging

所以我正在努力扩展www.ninjawars.net上项目的使用,我不确定如何在我们使用的关系数据库中灵活地表示它们。

我可能正在咆哮错误的树,所以请随意向其他方向提出建议,但目前我认为每个项目都应该有关系“标签”。

例如,Katana目前是“items”数据库中的一行。为了使它变成武器和可持续的东西,我想我会有一个“traits”数据库,以及一个连接两者的item_traits表。

// Objects and their basic data

item_id | item | material | etc
1 | Naginata | steel | etc


// Things that objects can do

trait_id | trait
1 | weapon
2 | holdable

// How those objects do those things, e.g. powerfully, weakly, while on fire

_item_id | _trait_id | item_trait_data
1 | 1 | damage: 5, damage_type: sharp, whatever, etc

我不确定如何建模所产生的额外数据(例如剑会造成的伤害,伤害类型等)。

我也不是特别高兴整个项目将被存储在多个地方,例如为了创建一个具有不同名称的项目的副本,比如“短剑”,我将不得不从多个表中复制以创建重复的项目。

有没有更好的方法来摆脱我失踪的东西?

1 个答案:

答案 0 :(得分:0)

嗯,不同种类的武器可以分享共同的功绩 例如,“尖锐”武器可以包括长剑,短剑,匕首和武士刀;他们都可以分享类似的基础伤害,以及一些与实际武器分别相关的额外特殊事物 同样,“钝”武器可以包括锤子,锤子和连枷 所以我认为你应该引入“武器类型”的概念,所以你不必为每种武器类型复制东西。