0

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

我的关系表中有 2 个表系统 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 (关系表中的主键)也指相同。

4

3 回答 3

1

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

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

您在嵌入式属性方面是否有无限增长?=> 坏主意!

是否有一些只有两个属性,有的有 100 个,有的有 1k?=> 尝试在集合中坚持一种大小的文档。(使用bucketing,如果你想要favs/best 5作为你的主文档)

更多信息:谈论艾略特霍洛维茨的架构设计

于 2012-09-05T15:20:42.143 回答
1

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

{
     "good": "success",
     "better": "progress"
}
于 2012-09-05T11:08:57.910 回答
0

模式设计对数据库模型的效率非常重要。您要避免尝试以关系数据库的思维方式考虑 mongodb 的模式设计。具体到您的问题,您不需要系统 id 的外键,因为您将系统属性嵌入到系统文档中。此外,正如上面指出的康斯坦丁,您的系统属性字段可以直接进入您的系统文档而无需嵌入。

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

于 2012-09-05T15:32:42.423 回答