Mongodb Schema设计适合一个建议

时间:2012-09-05 11:00:58

标签: mongodb mongodb-java schema-design mongodb-query

嗨,我是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(关系表中的主键)也是相同的。

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

有几种方法可以设计该架构,即使使用两个集合也是如此。 所以:

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

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

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

更多信息:Talk about Schemadesign by Eliot Horowitz

答案 2 :(得分:0)

架构设计对数据库模型的效率非常重要。您希望避免在关系数据库思维模式中尝试考虑mongodb的模式设计。特别是对于您的问题,您不需要具有系统ID的外键,因为您将系统属性嵌入到系统文档中。此外,您的系统属性字段可以直接进入您的系统文档,而不是像上面指出的康斯坦丁那样嵌入。

这里有一些链接可以帮助您开始考虑在mongodb中进行架构设计时需要考虑哪些因素: