たとえば、人が訪れた都市を保存したい場合、各都市には複数の訪問者がいて、各人は複数の都市を訪れます。どのように実装すればよいですか?
都市の属性 (たとえば、フランスのある都市を訪れたすべての人) についてクエリを実行したい場合もあれば、人物の属性 (30 歳未満の人が訪れたすべての都市) についてクエリを実行したい場合もあります。
私は自分で2つの方法を考えました:
- 各都市オブジェクトに訪問者の配列を含め、各人物オブジェクトに都市の配列を含めます。ただし、これは同じデータを 2 回格納することを意味し、オブジェクトが大きくなる可能性があります。
- 都市と人の両方の ID を格納する追加のオブジェクト「visit」を作成します。
オプション 2 が最適と思われます。ただし、2 つのクエリ例のそれぞれについて、少なくとも 3 つの ScriptDB クエリが必要になると思います。また、「anyOf」はかなり大きくなりますが、それが問題かどうかはわかりません。
例:
var db = ScriptDb.getMyDb();
var cityResult = db.query({type: 'city', country: 'France'});
var citiesInFrance= getAllCityIds(cityResult);
var visitResult = db.query({type: 'visit', cityId: db.anyOf(citiesInFrance)});
var personsVisitedFrance = getAllPersonIds(visitResult);
var personResult = db.query({type: 'person', personId: db.anyOf(personsVisitedFrance)});
これは、特に oldskool の sql クエリと比較すると、やや面倒に思えます。これが進むべき道ですか、それともまったく別のことを検討する必要がありますか?