用于关联不同 SQL Server 表的选项 [重复]

Posted

技术标签:

【中文标题】用于关联不同 SQL Server 表的选项 [重复]【英文标题】:Options for relating different SQL Server tables [duplicate] 【发布时间】: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,如果不是很清楚,这一切的重点是获取有关更好方法的信息。到目前为止,除了“这是一个坏主意”(我在我也认为的问题中已经指出)和我要求澄清的“制作另一个带有列的表”之外,您并没有提供太多帮助。如果您有一些实际的建议,请分享,但只是说这是一个坏主意并没有多大帮助。 【参考方案1】:

为不同类型的库存项目设置不同的表格并不是一个坏主意。使用幻数(例如:3=potions)可能不是一个好主意。

正如您已经意识到的那样,拥有不同类型的库存表(武器、盔甲、药水、食物……)的优势在于这些不同类型的东西具有不同的属性。每个库存类型表都将包含相应属性的列。

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

大多数游戏都为不同类型的物品设置了一定数量的插槽,因此拥有一个“玩家库存中的所有物品”表可能并没有直接帮助。

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

合并列表

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

【讨论】:

以上是关于用于关联不同 SQL Server 表的选项 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

SQL怎样合并显示两个没有关联的表

SQL server 一些小结

SQL Server数据库多表关联如何更新?

SQL SERVER,一张表中,有多个字段关联另一张表,怎么写SQL语句?

sql server的关联查询

关于SQL Server2005数据表字段关联问题