【发布时间】:2021-12-03 22:54:47
【问题描述】:
我正在制作一款游戏,该游戏中有不同类型的物品(武器、盔甲、药水等)。每种类型都有不同的统计数据,需要存储在数据库中。
我正在考虑制作“武器”表、“盔甲”表等,但很难想出一种将它们全部关联起来的好方法。
要向播放器显示所有项目的列表,只需硬编码每个表的选择查询并在之后以某种方式在代码中聚合很容易,但是有哪些设计模式/选项用于存储播放器将拥有的项目在他的库存中。
我唯一能想到的就是有一个表格,该表格包含一个与项目类型/表格相关的 ID。通过这种方式,我可以将玩家库存的数据作为键值对存储在数据库中,例如(“24, 3”、“54, 1”),假设为了示例的目的,它会被转换为带有 ID 的项目“ ID 为“3”的表中的 24”,即“药水”等。
不过我觉得这样可以改进,效果不大。
我打算在游戏中使用 EF Core。
所以,假设我有 3 种物品类型:武器、盔甲和药水。它们具有以下属性:
武器 - 重量、成本、伤害、damageType、minStr
盔甲 - 重量、成本、盔甲点数、bodySlot、硬度
药水 - 成本、类型、效果、效果量
【问题讨论】:
-
@KenWhite,如果我有一个包含项目类型列的表,我将如何记录一些项目具有而其他项目没有的不同统计信息?
-
是的,这些被称为
NULLable 列,@mummy。 -
@KenWhite,我将把它翻译成代码并再次获取数据。
-
@Larnu,是否有一个表,其中 80% 的值是空值?因为对于每种类型的项目,所有将保存另一种项目类型的值的列都将为空,并且它们将远远超过将为任何项目类型填充的列。此外,我需要为表格创建一个 EF 模型,为每个项目类型创建一个单独的模型,并在代码中进行翻译。
-
@KenWhite,如果不是很清楚,这一切的重点是获取有关更好方法的信息。到目前为止,除了“这是一个坏主意”(我在我也认为的问题中已经指出)和我要求澄清的“制作另一个带有列的表”之外,您并没有提供太多帮助。如果您有一些实际的建议,请分享,但只是说这是一个坏主意并没有多大帮助。
标签: sql-server database-design