代码之家  ›  专栏  ›  技术社区  ›  nils petersohn

文档数据库中的继承?

  •  18
  • nils petersohn  · 技术社区  · 15 年前

    我想知道,因为我搜索了PDF文件“[nosql]最终指南”和“beging[nosql]”中的单词“inheritance”,但没有找到任何东西?我错过什么了吗?因为我正在使用Hibernate和MySQL执行TablePerHierarchy继承,所以在[NoSQL]中,这会因某种原因而被弃用吗?

    (将[nosql]替换为您喜欢的“不仅是SQL”数据库)

    2 回复  |  直到 8 年前
        1
  •  46
  •   Gates VP    15 年前

    我知道这个答案有点晚了,但是对于MongoDB,您可能看到的是一些稍微不同的东西。

    Mongo是无模式的,因此“TablePerHierarchy”的概念不一定有用。

    假设如下

    class A
      property X
      property Y
      property Z
    
    class B inherits from A
      property W
    

    在RDMS中,您可能会有类似的东西

    table A: columns X, Y, Z
    table B: columns X, Y, Z, W
    

    但是MongoDB没有模式。所以您不需要以这种方式构造数据。相反,您将拥有一个“集合”,其中包含类型A或B(或C…)的所有对象(或“文档”)。

    所以您的集合将是一系列这样的对象:

    {"_id":"1", "X":1, "Y":2, "Z":3}
    {"_id":"2", "X":5, "Y":6, "Z":7, "W":6}
    

    您会注意到,我将在B类型的对象旁边存储A类型的对象。MongoDB使这非常容易。只需从集合中拉出一个文档,它就“神奇地”拥有所有适当的字段/属性。

    但是,如果您有“数据对象”或“实体”,则可以通过添加类型来简化您的生活。

    {"_id":"1", "type":"A", "X":1, "Y":2, "Z":3}
    {"_id":"2", "type":"B", "X":5, "Y":6, "Z":7, "W":6}
    

    这使得编写用于加载对象的工厂类更容易。

        2
  •  7
  •   Rsh    8 年前

    好吧,这是一个很古老的问题,但自从我来到这里,我想增加一个2017年的更新。
    如果你使用 mongoose 要连接到MongoDB,您可能需要签出 discriminators :

    鉴别器是一种模式继承机制。它们使你能够 有多个模型,在同一个模型之上有重叠的模式 基础MongoDB集合。

    起初,文档对我来说有点模糊,这 article 可能是更好的理解这个想法的地方。

    推荐文章