Исходя из реляционной базы данных, как, я уверен, и многих других, я ищу некоторые четкие рекомендации по настройке / проектированию моего хранилища данных в Google App Engine. Есть ли хорошие практические правила для людей, которые настраивают подобные хранилища данных без схемы? Я понимаю некоторые основы, такие как денормализация, поскольку вы не можете выполнять объединения, но мне было интересно, какие другие рекомендации были у людей.
Конкретный простой пример, с которым я работаю, касается хранения результатов поиска и их результатов. Например, в приложении Google App Engine с использованием Python определены следующие две модели:
class Search(db.Model):
who = db.StringProperty()
what = db.StringProperty()
where = db.StringProperty()
createDate = db.DateTimeProperty(auto_now_add=True)
class SearchResult(db.Model):
title = db.StringProperty()
content = db.StringProperty()
who = db.StringProperty()
what = db.StringProperty()
where = db.StringProperty()
createDate = db.DateTimeProperty(auto_now_add=True)
Я дублирую кучу свойств между моделями ради денормализации, так как не могу соединить Search
и SearchResult
вместе. Имеет ли это смысл? Или мне следует сохранить поисковый идентификатор в модели SearchResult
и эффективно «объединить» две модели в коде, когда я получу их из хранилища данных? Пожалуйста, имейте в виду, что это простой пример. Обе модели будут иметь гораздо больше свойств, и, так как я сейчас подхожу к этому, я бы поместил любое свойство, которое я добавлю в модель поиска, в модель SearchResult
.