【问题标题】:Mongodb Schema design suitable one suggestionMongodb Schema设计适合的一个建议
【发布时间】:2012-08-30 02:05:11
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      更多信息:Talk about Schemadesign by Eliot Horowitz

      【讨论】:

        【解决方案3】:

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

        这里有一些链接可以让您开始思考在 mongodb 中进行架构设计时需要注意哪些事项:

        猜你喜欢
        • 2017-08-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-13
        • 2011-12-28
        • 2019-03-17
        • 1970-01-01
        相关资源
        最近更新 更多