4

私はそれを認めます...NoSQLの世界に関しては、理論の概念がたくさんありません。

Java+MySQLを使用してNodeJS+MongoDBにいくつかの単純なアプリを移植することを考えていました(本当にクールに見えるマングースORMを見つけました)。

私が最初に非常に難しく、文書化されていないことに気付いたのは、多対多の関係をマッピングすることです。

私は最初にMongo-DOCSを読みました:http ://www.mongodb.org/display/DOCS/Schema+Design

...その後、実際の情報を探し回ったところ、そのようなQ&Aがたくさん見つかりました。Mongoでの多対多の参加に関するデータのモデリング?

M:Nを達成する方法があります、かっこいい!しかし、それから私は本当に怖くてがっかりする何かを読みました。「正直なところ、結合が必要な場合は、リレーショナルデータベースを使用します。

わかった!要点はわかりますが....共通のユーザー+ロール+UserRolesの多対多スキーマがあり、埋め込みを使用していると想像してください。つまり、ロールに別のテーブルスキーマを使用せず、すべてのユーザーでのみ使用します。その中の役割データ

する必要がある:

  • db内のすべてのユーザーを照会し、それらの役割データも読み取ります。
  • たとえば、ユーザーの作成に関連付けられた役割を選択するために、データベースで使用可能なすべての役割を照会します。

最初のポイントは些細なことですが、2番目のポイントはどうですか?

別のテーブルスキーマ「Roles」が必要であり、「User」にロールのIDを含むロール配列を格納する必要があることを教えてください。しかし、これはリレーショナルな世界であることがわかります。

NoSQLデータベースには適していないことを教えてくれますか?では、何でしょうか?

4

2 に答える 2

3

データを非正規化する必要があるかもしれません。

これを正しく行う方法は、ユースケースを確認し、それに応じてデータベースを設計することです。
これは、使用シナリオについて考える必要があることを意味します。

ユーザー/ロールの例

ユースケースについて考えてみましょう。

  • ユーザーがどの役割に属しているかをすばやく確認する
  • ユーザーを作成または編集するときにユーザーの役割を選択できるように、すべての役割を照会します。

私はこのようにします:

  • 今と同じようにユーザーに役割を保存します
  • また、すべての役割を別のコレクションに保存します

これにより、すべての要件が正しく満たされます。
明らかに、非正規化のため、役割を更新/名前変更するときは特別な注意が必要になります。

于 2012-09-27T11:28:55.293 に答える
0

オプションは次のとおりです。

  • データを非正規化する
  • 複数のクエリを実行する
  • MongoDB 集約フレームワークを使用する (ここで該当する場合)
  • MongoDB を使用しないでください

あなたの選択をしてください...

于 2012-08-26T13:51:28.160 に答える