Способ обеспечения уникального ограничения поля - PullRequest
0 голосов
/ 03 декабря 2011

У меня есть следующий класс модели.

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='yccheok@yahoo.com', email='yccheok@yahoo.com', checksum=456, version=1281, content=blob_key)

Я не уверен, что это хороший способ сделать это? Или есть другой лучший способ?

1 Ответ

3 голосов
/ 03 декабря 2011

Это действительно единственный способ сделать это.

В этом случае, вероятно, свойство email является избыточным, поскольку вы уже храните данные в имени ключа.

Единственный другой вариант - предоставить всем сущностям-людям одного и того же родителя, тем самым объединяя их в группу сущностей, что позволит вам выполнять обновления внутри транзакции для проверки существующей сущности с тем же адресом электронной почты. Однако это помешает вам вносить более 1 изменения во всех ваших Человеческих сущностях (и всех их дочерних элементов) в секунду, что неплохо для небольшого сайта с низким трафиком, но убивает масштабируемость.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...