Модель хранилища данных GQL для обзоров продуктов - списки ключей?или предки? - PullRequest
0 голосов
/ 17 августа 2011

Я делаю сервис обзора продуктов с помощью 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 и / или общего дизайна базы данных. Я довольно плохо знаком с дизайном базы данных в целом, поэтому чем больше помогу, тем лучше. Спасибо!

1 Ответ

1 голос
/ 17 августа 2011

Я бы предложил не делать ни одного - вместо этого используйте внешние ключи.Если у Обзора есть db.ReferenceProperty для продукта, для которого он был создан, и для пользователя, который его написал, вы можете легко получить все отзывы о товаре (Product.review_set.all()), все отзывы, написанные пользователем (User.review_set.all()), ипродукт и пользователь для обзора.

...