私はGoogle App Engineを使用して製品レビューサービスを行っています。私はデータストアモデルを構築するための良い方法について考えています(私は "高レプリケーション"設定を使用しています。エンティティとその祖先は非常に重要です)。特に、私はキーのリストを使用することについて(または先祖/両親を代わりに使用するべきかどうか)疑問に思っています。私の基本的なモデルは次のようになります。あなたが見ることができるように製品レビューのためのGQLデータストアモデル - キーのリスト?または祖先?
-------------
- Product -
------------- ----------
- [reviews] - ----> - Review -
- - /---------- -------------
------------- | - author - ---> - User -
| - - -------------
| ---------- - [reviews] - --|
| - - |
| ------------- |
| |
--------------------------------------
、各製品は、レビューのリストが含まれており、各ユーザーアカウントには、ユーザによって書かれたレビューの一覧が含まれています。私の主な質問は、これらのレビューのリストと、レビューキーのリストとして保存するのが最善かどうか、またはクエリを使用して即時に生成する方が良いかどうかです。
の製品に関連するレビューのリストの場合、レビューエンティティを特定の製品の子として作成し、レビューのリストを作成することが最善の方法です私はそれは例えば、祖先クエリを使用する必要がある場合-fly:
reviews = db.GqlQuery("SELECT * "
"FROM Review "
"WHERE ANCESTOR IS :1 "
"ORDER BY date DESC LIMIT 10",
product_key)
しかし、与えられたユーザによって書かれたレビューの一覧を取得するために、私は上記と同じ操作を行うための方法を考えることはできません。ユーザーが書いた各レビューに関連するキーのリストを保存しなければならないようです。これは正しいです?もしそうなら、GAEデータストアにキーのリストを保存する最良の方法は何ですか?
GAEデータストアおよび/または一般的なデータベース設計に関するこのシナリオに関する助言や洞察は、非常に高く評価されます。私は一般的にはデータベース設計にはかなり新しいので、より多くの方に役立ちます。ありがとう!
ありがとうございます!私はあなたが提案していることをエコーするドキュメントでこの記事を見つけました。エンティティリレーションシップのモデリングに関する一般的な読書です。 http://code.google.com/appengine/articles/modeling.html –
ただし、1つの質問のみ。エンティティグループはどこにこのすべての要因ですか?製品とレビューとユーザーが同じエンティティグループ(提案しているもの)にない場合、結果が矛盾する可能性はありませんか?これを防ぐ方法はありますか? –