2012-09-05 31 views
0

嗨,我是新手來mongodb.I使用java。Mongodb Schema設計合適的一個建議

我在我的關係表中有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"}] } 
     } 

這是這個設計的最佳模式嗎?

爲了避免只加入我們嵌入的文件。

由於「_id」= 100(關係表中的主鍵)也是相同的,所以我懷疑system_id:100(關係表中的外鍵)是否必要。

回答

1

您的屬性對象中的Foreight項並不是必需的,因爲您已將它們嵌入到文檔中。系統性能應只是一個數組,甚至對象,如:

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

有幾種方法來設計架構,即使使用兩個集合。 因此:

您的應用程序如何使用存儲的信息?

您在嵌入式屬性中有無限增長嗎? =>壞主意​​!

有一些只有兩個屬性,一些有100,一些有1k? =>嘗試在一個集合中保留一個文檔大小。 (使用桶裝,如果你想的收藏/ 5最好爲您的主文檔)

瞭解更多信息:Talk about Schemadesign by Eliot Horowitz

0

架構的設計是你的數據庫模型的效率非常重要。你想避免試圖在關係數據庫的思維模式中考慮mongodb的模式設計。特別是對於你的問題,你不需要擁有系統ID的外鍵,因爲你正在將系統屬性嵌入到你的系統文檔中。另外,您的系統屬性字段可以直接進入您的系統文檔而不需要嵌入,就像上面指出的康斯坦丁一樣。

下面是一些鏈接,讓你開始思考什麼樣的考慮是重要的MongoDB中做架構設計時做出:

+1

http://www.manning.com/banker/(MongoDB的行動) HTTP:/ /www.10gen.com/presentations/mongosf2011/schemabasics http://www.10gen.com/presentations/mongosv-2011/schema-design-by-example http://www.10gen.com/presentations/mongosf2011/schemascale 以下是一些示例模式設計: http://docs.mongodb.org/manual/use-cases/ – Louisa