Я читаю о движке приложений Google и готовлю образец, чтобы лучше понять его.
Короче говоря, пользователь может записывать запись на каждый день месяца, как в календаре. И пользователь может просматривать записи ежемесячно. Так что не более 30 штук за раз.
Первоначально я использовал db
, и отношение «один ко многим» было прямым.
Но как только я наткнулся на ndb
, я понял, что есть два способа моделирования отношения «один ко многим».
1) Структурированное свойство, по-видимому, действует как повторяющееся свойство в модели пользователя. Означает ли это, что если я извлеку одного пользователя, я автоматически извлеку все записи, которые он ввел? (например, весь год) Это не очень эффективно, не так ли? Я предполагаю, что преимущество заключается в том, что вы получаете все связанные данные за одну операцию чтения.
from google.appengine.ext import ndb
class User(UserMixin, ndb.Model):
email = ndb.StringProperty(required = True)
password_hash = ndb.TextProperty(required = True)
record = ndb.StructuredProperty(Record, repeated=True)
class Record(ndb.Model):
notes = ndb.TextProperty()
2) В качестве альтернативы я мог бы использовать, возможно, более классический способ:
class User(UserMixin, ndb.Model):
email = ndb.StringProperty(required = True)
password_hash = ndb.TextProperty(required = True)
class Record(ndb.Model):
user = ndb.KeyProperty(kind=User)
notes = ndb.TextProperty()
Какой способ лучше в моем случае использования?
Record
быть прочитаны без ведома Пользователя? Если да, то я бы использовалndb.KeyProperty()
, если требуетсяUser
, тоndb.StructuredProperty
- person bnlucas   schedule 19.06.2013ndb.StructuredProperty
лучше? Могу ли я по-прежнему фильтровать текущий месяц, чтобы иметь менее затратную операцию чтения, или это в любом случае даст мне все записи? Спасибо - person Houman   schedule 19.06.2013