お疲れ様です。イアンです。
de-normalizeというのは、具体的に冗長データを作ることです。ちょっと分かりにくいと思いますので、例でご説明をさせて貰います。
User と Comment というエンティティがあるとします。
SQLでは、JOINを使って、一気にデータを取れますが、GAEではできませんので、どうしても、このクエリをしたいと、新しいエンティティを作って、JOINしたデータを管理します。User と CommentをJOINしたデータを別のUserCommentで格納しておきます。
モデルを書きますと、
from google.appengine.ext import db
class User(db.Model):
name = db.StringProperty(verbose_name=u"Name")
class Comment(db.Model):
user = db.ReferenceProperty(User)
comment_text = db.StringProperty(verbose_name=u"Comment")
class CommentUser(db.Model):
user = db.ReferenceProperty(User)
comment = db.ReferenceProperty(Comment)
name = db.StringProperty(verbose_name=u"Name")
comment_text = db.StringProperty(verbose_name=u"Comment")
これで、CommentUser.all().filter(...)で、JOINしたデータの filter をかけます。 しかし、お手数ですが、CommentをDatastoreに格納するときに、CommentUserも格納しておき、Commentデータが編集や、削除されたときにも、CommentUserも更新しないといけません。
普段に二つのクエリをするほうが良さそうと思いますが、データが多い場合は冗長データを使えば良いと思います。
--
=======================================
株式会社ビープラウド イアン・ルイス
〒150-0012
東京都渋谷区広尾1-11-2アイオス広尾ビル604
email:
ianm...@beproud.jp
TEL:03-5795-2707
FAX:03-5795-2708
http://www.beproud.jp/=======================================