Я делаю сервис обзора продуктов с помощью Google App Engine, и мне интересно узнать о хорошей практике структурирования моделей хранилищ данных (я использую настройку "высокой репликации", и я понял, что вы структура сущностей и их предков довольно важна). В частности, мне интересно использовать списки ключей (или я должен вместо этого использовать предков / родителей). Моя базовая модель выглядит так:
-------------
- Product -
------------- ----------
- [reviews] - ----> - Review -
- - / ---------- -------------
------------- | - author - ---> - User -
| - - -------------
| ---------- - [reviews] - --|
| - - |
| ------------- |
| |
--------------------------------------
Как видите, каждый продукт содержит список отзывов, а каждая учетная запись пользователя также содержит список отзывов, написанных пользователем. Мои основные вопросы касаются этих списков рецензий и того, лучше ли их хранить в виде списков ключей рецензий, или же лучше просто генерировать их на лету, используя запросы.
Похоже, что для списка отзывов, относящихся к данному продукту , лучшее, что можно сделать, - это создать сущности "Рецензирование" в качестве дочерних для данного продукта, а затем просто создать список отзывов на лету, когда мне это нужно, используя запрос предка, например:
reviews = db.GqlQuery("SELECT * "
"FROM Review "
"WHERE ANCESTOR IS :1 "
"ORDER BY date DESC LIMIT 10",
product_key)
Однако для получения списка отзывов, написанных данным пользователем, я не могу придумать способ сделать то же самое, что и выше. Кажется, мне пришлось бы хранить список ключей, относящихся к каждому отзыву, написанному пользователем. Это правильно? Если да, то как лучше всего хранить список ключей в хранилище данных GAE?
Будем весьма благодарны за любую помощь или понимание этого сценария в том, что касается хранилища данных GAE и / или общего дизайна базы данных. Я довольно плохо знаком с дизайном базы данных в целом, поэтому чем больше помогу, тем лучше. Спасибо!