2011-09-12 32 views
3

JPAではSQLバックエンドを使用して、埋め込みテーブルが自動的に更新されます。 NoSQL(MongoDB)のメカニズムは同じですか?ここで
私が達成しようとしているものの例である:
テーブル:
MongoDB埋め込みドキュメント

学生
学生
@OneToMany
コース詳細(別のコーステーブルから)

の詳細を

JPAとSQLでは、コースの詳細テーブルが更新された場合、変更は反映されますそれを参照しているすべての生徒を対象としています。

MongoDBでは、結合を使用する代わりに、ドキュメントがその中に埋め込まれています。 MongoDBでこの問題をどのように解決するのですか?

おかげで、 サム

答えて

2

要するに、それはまた、リンゴとオレンジの質問のビットです。 MongoDBは、最も緩い意味でのSQLの置き換えです。どちらもデータベースです。 JPAは、1:NとN:M関係をフードの下で一貫して保つようなことを行うことができるORMレイヤーです。 JPAなどを実装するMongoDB ORM層は現在のところありません。

しかし、mongoのようなNoSQLデータベースのコンテキスト内では、スキーマが正しくないと言われています。再利用されるコンテンツを含むドキュメントを埋め込むべきではありません(ほとんどの場合、データ複製の正規化やパフォーマンスなどを犠牲にするパフォーマンスの最適化は例外です)。

この場合、個別のコース詳細コレクションが必要で、そのコース詳細の_id値の配列を学生ドキュメントに格納します。そうすれば、コース詳細文書の突然変異を追跡することなく、このコレクションを別々に変更することができます。

DBRefs参考資料を使用しないでください。 DBRefは、既知のタイプの文書へのID参照のための適切なツールではありません。代わりに単純な_id参照を使用してください。

ので、TL; DRのバージョン:別々のコレクションで

  • 入れコースの詳細を文書
  • 埋め込みあなたの学生でのコースの詳細を文書に_id年代の唯一の配列

例:

+0

私は、あなたが(1)「示唆された」という言葉を削除し、(2)「データベースDBRefs "との"参照 "。これはあなたの答えをより役立つでしょう。私は混乱を避けるために以前のコメントを削除しました。 – jtoberon

+0

フィードバックをしてくれてありがとう –

+0

このアプローチは自分のアプリケーションに最適です。助けてくれてありがとう! –

0

あなたが代わりに埋め込まれた文書のreferenceを使用することができます。コースデータのコピーは1つしかなく、すべての生徒は同じ情報を定義で参照する必要があります。

関連する問題