Mongodb Schema设计合适的一个建议



嗨,我是mongodb的新手。我正在使用java。

我有两个表系统,关系表中有system_properties。

像这样的东西。

       Table              Fields                                        values
      System           System_ID(PK), System_Info                  100, cisc
                                                                   200, Gets
      System_prop      System_ID(FK), Prop_key, Description        100, good, success
                                                                   100, better,progress  
                                                                   200, worse,failed

我正在尝试为此创建一个架构。例如:用于插入一个文档

      System
         {
             "_id" : 100
             "System_Info" : "cisc"
             System_Properties :
                 { "system_id":100
                        [{prop_Key : "good", Description: "success"}, 
                         {prop_Key : "better", Description: "progress"}] }
         }

这是这个设计的最佳方案吗?

为了避免联接,我们只嵌入文档。

我怀疑system_id:100(关系表中的外键)是否是必要的,因为"_id"=100(关系表的主键)也指的是相同的。

属性对象中的Foreight键是不必要的,因为您已经将它们嵌入到文档中。系统属性应该只是一个数组,甚至像这样的对象

{
     "good": "success",
     "better": "progress"
}

有几种方法可以设计该模式,甚至可以使用两个集合。因此:

您的应用程序如何使用存储的信息?

嵌入属性是否有无限增长?=>坏主意!

有没有一些只有两个属性,一些有100,还有一些有1k?=>尽量在一个集合中坚持一个大小的文档。(使用桶装,如果你想要主文档的favos/best 5)

更多信息:谈论Eliot Horowitz 的架构设计

模式设计对数据库模型的效率非常重要。您希望避免试图以关系数据库的心态来思考mongodb的模式设计。特别是对于您的问题,您不需要有系统id的外键,因为您正在将系统属性嵌入到系统文档中。此外,您的系统属性字段可以直接进入您的系统文档,而无需嵌入,正如Konstantin所指出的那样。

以下是一些链接,可以让您开始思考在mongodb中进行模式设计时需要注意的事项:

最新更新