2011-12-03 14 views
0

私は以下のモデルクラスを持っています。現在フィールドの一意制約を保証する方法

class Human(db.Model): 
    email = db.StringProperty(required=True) 
    date = db.DateTimeProperty(auto_now=True) 
    checksum = db.IntegerProperty(required=True) 
    version = db.IntegerProperty(required=True) 
    content = blobstore.BlobReferenceProperty(required=True) 

、データベースレベルでemailの一意性を確保するために、(データベース全体には重複した電子メールがないことを確認します)私は、次の方法を使用しています。

h = human.Human(key_name='[email protected]', email='[email protected]', checksum=456, version=1281, content=blob_key) 

これは良い方法ですか?または、他に良い方法がありますか?

答えて

3

これは本当にこれを実行する唯一の方法です。

この場合、既にキー名にデータを格納しているため、emailプロパティはおそらく冗長です。

他の唯一のオプションは、すべてのHumanエンティティに同じ親を与えることです。エンティティグループ内にそれらをまとめて、トランザクション内で更新を行い、同じ電子メールで既存のエンティティをチェックできるようにします。ただし、これにより、1秒あたりの人間のエンティティ(およびその子ども)すべてに約1回以上の変更を加えることができなくなりますが、トラフィックの少ない小さなサイトでは問題ないものの、スケーラビリティが損なわれます。

関連する問題