关联不同 SQL 服务器表的选项

Options for relating different SQL Server tables

我正在制作一款游戏,在该游戏中有不同类型的物品(武器、盔甲、药水等),每种类型都有不同的统计数据需要存储在数据库中。

我正在考虑制作“武器”table、“盔甲”table 等等,但很难想出一种将它们联系起来的好方法。

要向玩家显示所有项目的列表,只需对每个 table 的 select 查询进行硬编码并在之后以某种方式在代码中进行聚合就很容易了,但是什么设计模式/选项是用来存储玩家库存中的物品的吗?

我唯一能想到的就是有一个 table 来保存一个与项目类型相关的 ID / table。通过这种方式,我可以将玩家清单的数据作为键值对存储在数据库中,例如 ( "24, 3", "54, 1" ),为了这个例子,我们假设将翻译为带有 ID 的项目" table 中的 24",ID 为“3”,即“药水”等

不过我觉得这个可以改进,没有效果。

我打算在游戏中使用 EF Core。

所以,假设我有 3 种物品类型:武器、盔甲和药水。它们具有以下属性:

weapon - weight, cost, damage, damageType, minStr
armor - 重量、成本、armorPoints、bodySlot、硬度
药水 - 成本、类型、效果、效果量

为不同类型的库存项目设置不同的tables并不是一个坏主意。使用魔法数字(例如:3=药水)可能不是一个好主意。

正如您已经意识到的那样,拥有不同类型库存 table 的优势(武器、盔甲、药水、食物...)是这些不同类型的东西具有不同的属性。每个广告资源类型 table 都将包含适合属性的列。

真正的问题是您如何跟踪玩家库存中的物品?

大多数游戏都有一定数量的插槽用于放置不同类型的物品,因此拥有一个“玩家物品栏中的所有物品”table 可能没有直接帮助。

你可以有一个 table 的武器,一个 table 的盔甲,一个 table 的药水,等等。您可能希望此 table 包含一个指向事物类型的键(“Gauntlets of Punchiness”)和一列指示该项目所在的插槽。请记住,table 不像数组,它们没有您可以排序或用作索引器的自然顺序,即使事物在物理上是按顺序存储的。这个 table 可能还包含一个数量列,如果这有意义的话。例如,您的食物中可能有 10 条面包 table,它们只占用一个库存槽位。

合并列表

如果您确实需要生成某种组合列表,您可以使用一个视图(它只是一个持久化查询)对一些一致的列集执行 UNION 操作。这涉及针对您的每个库存 table 编写一个查询,这些清单 table 连接到它们各自的项目类型 table 。这里的限制是您需要在每个部分中具有相同数量的列,并且它们需要具有一致的数据类型,否则 UNION 将不起作用。