0

こんにちは私はmongodbの初心者です。Javaを使用しています。

リレーショナルテーブルにsystem_propertiesという2つのテーブルがあります。

このようなもの。

       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

このためのスキーマを作成しようとしています。例:1つのドキュメントを挿入する場合

      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(リレーショナルテーブルの外部キー)が必要かどうか疑問です。

4

3 に答える 3

1

2 つのコレクションを使用する場合でも、そのスキーマを設計する方法はいくつかあります。そう:

アプリは保存された情報をどのように使用しますか?

その埋め込まれたプロパティに際限のない成長がありますか? =>悪い考えです!

プロパティが 2 つしかないもの、100 のもの、1k のものはありますか? => コレクション内の 1 つのサイズのドキュメントに固執するようにしてください。(バケットを使用し、メインドキュメントにお気に入り/ベスト5が必要な場合)

詳細: Eliot Horowitz による Schemadesign についてのトーク

于 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 に答える