【问题标题】:inheritance in document database?文档数据库中的继承?
【发布时间】:2011-03-03 16:56:26
【问题描述】:

我想知道,因为我在 pdf“[noSql] 权威指南”和“beginning [noSql]”中搜索了“继承”这个词,但我什么也没找到?我错过了什么吗?因为我正在使用 hibernate 和 mysql 进行 tablePerHierarchy 继承,所以在 [noSql] 中是否出于某种原因不推荐使用它?

(把[noSql]换成你喜欢的“not only sql”数据库)

【问题讨论】:

    标签: mongodb cassandra couchdb nosql


    【解决方案1】:

    嗯,这是一个很老的问题,但既然我来到这里,我想添加一个 2017 年的更新。
    如果您使用 mongoose 连接到 MongoDb,您可能需要查看 discriminators

    鉴别器是一种模式继承机制。它们使您能够 有多个具有重叠模式的模型 底层 MongoDB 集合。

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

    【讨论】:

      【解决方案2】:

      我知道这个答案有点晚了,但对于 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}
      

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-27
        • 2018-09-15
        • 2010-09-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多