データストアに保存したい「ユーザー」レコードの概念があるとします。
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 など、ユースケースが 1 つしかないフィールドもあり、これらが 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 で User に ReferenceProperty を配置できますが、これは実際には 1 対多になります。任意の User に関連する UserTwitterOauth は最大で 1 つにする必要があります。これらのモデルを 1 対 1 で関連付けるにはどうすればよいでしょうか?