Database 什么数据库适合实体之间的组合关系?

Database 什么数据库适合实体之间的组合关系?,database,database-design,nosql,Database,Database Design,Nosql,TLDR:正在寻找一个本地运行的免费数据库选项,它有助于合成。对象A由B、C、D组成。其中B、C与A的类型相同。我应该使用什么 我想尝试一些开源数据库。我正在玩一个有手工制作的游戏,深入到对象中找出我需要的资源有点麻烦。这似乎是一个通过数据库解决的好问题。我希望探索一个无sql选项,因为我没有太多的经验 用一个简单的人为的例子来阐明这个领域 A职员:需要5块木头 矛头:需要2个铁 矛:需要1根棍子,1个矛头 三叉戟:需要1根棍子,3个矛头,2个铁 如果我想建造2个三叉戟和1个矛,我的数据库查

TLDR:正在寻找一个本地运行的免费数据库选项,它有助于合成。对象A由B、C、D组成。其中B、C与A的类型相同。我应该使用什么

我想尝试一些开源数据库。我正在玩一个有手工制作的游戏,深入到对象中找出我需要的资源有点麻烦。这似乎是一个通过数据库解决的好问题。我希望探索一个无sql选项,因为我没有太多的经验

用一个简单的人为的例子来阐明这个领域

  • A职员:需要5块木头
  • 矛头:需要2个铁
  • 矛:需要1根棍子,1个矛头
  • 三叉戟:需要1根棍子,3个矛头,2个铁
如果我想建造2个三叉戟和1个矛,我的数据库查询会告诉我我需要15块木头,18块铁

因此,每个可手工制作的物品都需要一些基本资源和/或其他手工制作的物品的组合。要向数据库提出的问题是,鉴于我已经拥有一些资源,我还需要收集什么来构建一些项目组合

如果我在sql中尝试这样做,我想我会创建4个表

  • 资源表(制作所需的原材料)
  • 物品表(我可以制作的物品)
  • 多对多表,将项映射到项
  • 多对多表,将项映射到资源
  • 你推荐我用什么?正如我在上面所说的,我希望通过玩这个小项目来了解no-sql,但无可否认,我对这些数据库并不熟悉,一个有效的答案可能是,没有任何sql数据库能够很好地适应您的问题集。(模型和查询)

    谢谢

    使用我在评论中链接的图片,您有一个资源表

    Resource
    --------
    Resource ID
    Resource Name
    
    以下是基于您的示例的一些行。我故意一枪接一枪地加上矛头。资源的顺序并不重要

    Resource ID | Resource Name
    ---------------------------
              1   Wood
              2   Iron
              3   Staff
              4   Spear
              5   Spearhead
              6   Trident
    
    接下来,您有一个ResourceHierarch表

    ResourceHiearchy
    ----------------
    ResourceHiearchy ID
    Resource ID
    Parent Resource ID (FK)
    Resource Quantity
    
    下面是一些行,同样基于您的示例

    ResourceHiearchy ID | Resource ID | P Resource ID | Resource Quantity
                      1             6            null                null
                      2             5               6                   3
                      3             3               6                   1
                      4             2               6                   2
                      5             4               3                   1
                      6             4               5                   1
                      7             5               2                   2
                      8             3               1                   5
    
    诚然,这是很难用手创造的。我可能在我的示例中犯了一些错误。应用程序的一部分允许您使用实际的资源名称创建资源和ResourceHierarch行

    为了检索顶级资源的所有组件,您必须进行多次查询,首先从空的父ResourceHiearchy ID开始,然后查询资源。这是物料清单的缺点

    BOM表的优点是对嵌套没有限制,您可以自由组合项目和资源来制作更多项目


    如果您愿意,可以在资源表中标识带有标记的资源和项目。

    您可能需要考虑一个图形数据模型,如JaNasGrand,其中节点(节点)可以是一个集合的成员(定义为另一个节点),通过关系(EDGE)。 这将允许您拥有您正在谈论的多子或多父关系

    母亲与父亲结婚

    孩子1,孩子2,孩子3。。。奇尔登

    然后,所有人都将与母亲和父亲有一种“childOf”关系,并将成为集合中其他成员的“兄弟姐妹”,如边缘所示

    有道理吗

    以下是您可以拥有的更多类型的边标签和多重性:

    披露:我为锡拉布工作,我们的数据库经常被用作JanusGraph实现下的存储引擎。还有许多其他类型的NoSQL图形数据库可以检出。找到适合您的用例和数据模型的

    编辑:JanusGraph是开源的,Scylla也是:


    这是一种经典设计。这是一个关系数据库设计,但是我想如果你想的话,你可以使用NoSQL数据库。谢谢Gilbert,也许我不太理解它。虽然关闭,但它与“此模型显示层次结构中的每个条目都可以有一个‘父项’,这是层次结构中的另一个条目”不太匹配。这种关系是多对多的。使用链接中的语言,我想说层次结构中的每个条目都可以有N个父条目,它们是层次结构中的其他条目。虽然我的spear和trident示例是简单的表示,但实际的项目可以有许多层嵌套。我在原始文章中添加了一些信息,介绍了我如何用sql表将其概念化。感谢Peter,图形数据库是我从未使用过的另一种技术。这可能是探索它们的一个好方法。感谢您的链接,感谢您的反馈。感谢Gilbert您的电子表格帮助我了解了这种组织数据的方式是如何工作的。我得好好考虑一下。为了回答我想对数据提出的问题,我还不确定查询的外观。