0

ご覧のとおり、と という 2 つのクラスがSchoolありStudentます。「学校名が bla bla bla の生徒」と「90 歳以上の生徒がいる学校」を検索したい。いくつかのドキュメントを読みましたが、少し混乱しています。

public class School extends BasicDBObject  {
  private int id;
  private String name;
  private String number;
  private List<Student> studentList = new ArrayList<Student>();,

  //getter and setters
}

public class Student extends BasicDBObject{
  private int id;
  private String name;
  private String grade;
  private School school;

  //getter and setters
}
4

1 に答える 1

10

MongoDB はリレーショナル データベースではありません。結合をサポートしていません。結合をシミュレートするには、最初のコレクションに対してクエリを実行し、結果を取得してから$in、最初のクエリによって返されたドキュメントの該当するキー値で満たされた大きなクエリで 2 番目のコレクションをクエリする必要があります。これは非常に遅くて醜いので、データベース スキーマはそれを避けるように設計する必要があります。

あなたの例では、学校名をStudentドキュメントに追加します。これにより、単一のクエリで両方のユースケースを満たすことができます。

リレーショナル データベースのバックグラウンドを持っている人なら誰でも、「しかし、それは冗長です! 第 2 正規形に違反しています!」と言うでしょう。その通りですが、正規化はリレーショナル データベースに固有の設計パターンです。ドキュメント指向のデータベースには必ずしも適用されません。では、ドキュメント指向データベースに適用できる設計パターンは何でしょうか? タフなコール。それは新しい技術です。私たちはまだこれを理解しています。

于 2013-07-08T00:15:25.987 に答える