gpt4 book ai didi

database-design - 标准化这个数据库 : what would be ideal in this scenario?

转载 作者:行者123 更新时间:2023-12-04 07:14:16 27 4
gpt4 key购买 nike

我正在设计一个游戏,其中一个角色有很多元素,而这些元素可以有多种类型。有一个角色表,以及十二个按类型(例如武器、盔甲和各种其他项目类型)分割的可能项目的不同表。

我想制作一个表来保存这些项目类型的实例(基本上是一个字符的项目表),每一行都有一个来自字符表的外键,以指示哪个字符拥有该项目的所有权。

起初我想我会在角色的项目表中制作外键——十二个项目表中的每一个都有一个键。但是由于每个项目只能是一种“类型”,这将导致每行中有 11 个空字段,这似乎是错误的。

什么是更好的方法?我还没有建立数据库,所以我可以接受不使用十二个项目表的其他库存想法,但要知道:管理界面将允许用户根据需要添加/删除/修改每种类型的项目。

另外,我想坚持最佳规范化实践,所以我将忽略不可避免的“谁在乎?只做有效的工作并使用可为空的字段”。

最佳答案

我会首先检查您是否可以将这十二张 table 合二为一。从 Single-Table Inheritance 开始,因为它很简单,我敢打赌在这种情况下它就足够了。

CHARACTER --<- CHAR_ITEMS  ->-- ITEM_TYPES_STI 

如果没有,请尝试 Class Table Inheritance .基本上,为“项目类型”定义一个 super 表,角色的项目引用它。 12 个单独项目类型的每个子表也引用了项目类型 super 表:
CHARACTER --<- CHAR_ITEMS  ->-- ITEM_TYPES_SUPER --- ITEM_TYPE_SWORDS

回复您的评论:我已经澄清了上面的内容。 item_types_super 和 item_type_swords 的关系应该是 1:1。也就是说,对于剑中的每一行, super 中应该有一个不同的行。这样做的方法是让剑中的外键也是它的主键。

但并非 super 中的每一行都有剑行。 super 中的行可以由 shield 或 axes 中的一行引用。但仅限于一种亚型。这个想法是所有项目类型共有的列都属于 super ,而特定于子类型的列放在每个子类型表中。

关于database-design - 标准化这个数据库 : what would be ideal in this scenario?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3305712/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com