3

CodeIgniter/MySQL から Laravel/MongoDB アプリケーションに移行しています。

私のアプリの構造は次のとおりです。

ユーザー(モデル)

  • ID
  • ファーストネーム
  • 苗字
  • 性別
  • FacebookのID
  • facebook_data
  • google_id
  • google_data

テスト(モデル)

  • ユーザーID
  • タイプ
  • 題名
  • 状態
  • 結果

MongoDB では、多くの TESTS を内部に含む 1 つの USER コレクションを持つべきですか、それとも TESTS を USER コレクションの外に置くべきですか?

4

1 に答える 1

2

データ モデリングに関する考慮事項

これは、mongoDB のドキュメントで詳細に説明されていますが、mongoDB 固有の質問ではありません。

グローバルな正解または不正解はありませんが、原則として、埋め込みドキュメントの配列を作成することを検討している場合は、次のようになります。

db.posts.findOne();
{
    title: "Some Post",
    comments: [
        {
            _id: ObjectId("x"),
            author_id: ObjectId("y"),
            body: "z",
            created: Date()
        },
        {
            _id: ObjectId("a"),
            author_id: ObjectId("b"),
            body: "c",
            created: Date()
        },
    ]
}

...これは、わずかな量のデータでのみうまく機能します。自明ではない量のデータの場合、非常に制限的/問題になる可能性があります。たとえば、投稿ごとに数百のコメントがある場合、それらを効率的にページ分割するのは困難です。そのため、埋め込みドキュメントの数が多くなると予想される場合は、埋め込みドキュメントの配列を作成しないでください。代わりに、別のコレクションを使用してください。

質問のデータのスキーマの例

データに対して次のスキーマを検討できます。

ユーザー:

_id: objectId
firstname
lastname
age
gender
facebook: {
    id: longint/string
    locale:
    ...
}
google: {
    id: string
    age:
    ...
}

テスト

_id: objectId
user_id: objectId
type
title
status
result

facebook および google オブジェクトは、質問に書かれているように「データ」を保持しますが、通常のユーザーが多くのテストを持っていることを除けば、テストはユーザーデータ関係に属しています。これにより、任意の数のテストが許可され、質問の情報が与えられた場合、実際の欠点はありません。

于 2013-03-05T18:10:48.987 に答える