SQL模式到猫鼬模型的最佳方法

时间:2018-08-27 09:51:48

标签: sql json mongoose

对于没有NoSQL最佳实践经验的人,将SQL Schema转换到Mongoose模型时,最好的方法是什么。 什么时候应该使用SubDocuments,何时填充以引用其他文档。 是否有任何采用大型SQL模式并将其转换为Mongoose模型的转换器(找不到类似的东西)。

我知道这个问题有点主观且广泛,但是任何参考或线索都将不胜感激。

亲切的问候

1 个答案:

答案 0 :(得分:1)

您的问题并不仅仅与Mongoose有关,Mongoose只是MongoDB的ORM,而是与NoSQL数据库的总体设计以及它们与传统SQL数据库的关系。

通常,在以下情况下,最好使用嵌入式(猫鼬中的非规范化子文档)数据模型:

  • 我们有一些信息,需要同时全部检索,经典示例是地址(来源MongoDB网站):

    地址:{

          street: "123 Fake Street",
          city: "Faketon",
          state: "MA",
          zip: "12345"
        }
    
  • 您具有1-to-N关系,其中N个元素始终与1个元素一起在上下文中访问。

因此,通常,当我们不需要自己访问相关实体时,我们会将它们嵌入父对象或通常有意义的另一个对象中。这具有一些优点,例如读取速度最快,数据库操作较少和原子更新。这种模型是NoSQL的商标功能,无模式设计或灵活模式之一。

另一种情况是参考(使用Mongoose中的populate方法进行规范化)数据模型,该模型更适合以下情况:

  • 我们不想通过嵌入来复制dat ,因为这样做不会给我们带来更好的性能,或者仅仅是性能提升不值得增加的复杂性< / strong>。 例如:假设在 Spare Parts 数据库的所有文档中嵌入相同的 Manufacturer 信息,最好有单独的制造商文档,并将对它们的引用放在备用文档中零件文件

  • 我们需要代表N对N \ nested \ complex关系。

  • 我们具有分层结构的数据,出于某种原因我们需要对其进行维护,因此我们关心模式结构并希望保留它。

  • 通常,参考文档的读取性能较差,因为遵循参考通常需要更多查询,当我发现某些内容时,通常需要连续查询以获取详细信息,但这是一种更灵活的数据模型,因为我可以以相同的方式更新或访问文档的每个部分。

  • 另一方面,如果嵌入了更多数据,我们需要较少的查询来获取它,但是仅更新一小部分在计算上更加复杂,因为它需要访问整个嵌入。

可以在这里以及页面后面的链接中找到有关MongoDB设计模式的良好入门。 https://docs.mongodb.com/manual/core/data-model-design/