在文档数据库中继承?

时间:2010-06-14 20:18:37

标签: mongodb cassandra couchdb nosql

我很想知道因为我搜索了pdf“[noSql]权威指南”和“开始[noSql]”这个单词“继承”但我没有找到任何东西?我错过了什么吗?因为我正在使用hibernate和mysql进行tablePerHierarchy继承,在[noSql]中由于某种原因会不会被弃用吗?

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

2 个答案:

答案 0 :(得分:48)

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

这样可以更轻松地编写工厂类来加载对象。

答案 1 :(得分:7)

这是一个非常古老的问题,但由于我最终在这里,我想添加一个2017年更新。
如果您使用mongoose连接到MongoDb,则可能需要查看discriminators

  

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

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