假设您有一个想要存储在数据存储中的“用户”记录的概念。
class User (db.Model):
first_name = db.StringProperty()
last_name = db.StringProperty()
created = db.DateTimeProperty(auto_now_add=True)
twitter_oauth_token = db.StringProperty()
twitter_oauth_secret = db.StringProperty()
几乎每次使用用户对象时,您都希望使用一些字段,例如 first_name 和 last_name。
但是,有些字段只有一个用例,例如 twitter_oauth_token 和 twitter_oauth_secret,并且在 95% 的时间都不需要它们时,对它们进行序列化和反序列化有点低效。
因此,如果您拆分模型:
class User (db.Model):
first_name = db.StringProperty()
last_name = db.StringProperty()
created = db.DateTimeProperty(auto_now_add=True)
class UserTwitterOauth(db.Model):
oauth_token = db.StringProperty(required=True)
oauth_secret = db.StringProperty(required=True)
created = db.DateTimeProperty(auto_now_add=True)
您可以在 UserTwitterOauth 中为用户放置一个 ReferenceProperty,但这实际上是一对多的,因为没有什么可以阻止每个用户拥有多个 UserTwitterOauth 对象。您希望最多有一个与任何用户相关的 UserTwitterOauth。您如何将这些模型一对一地关联起来?