Я бы добавил id (uuid, сгенерированный из кода) для каждой таблицы.
Получить вопросы и ответы пользователя
Установить userId как поле в Вопросах и Ответах, а затем установить индекс для этого. Это позволит вам (с двумя отдельными запросами) получить все вопросы и ответы конкретного пользователя.
получить вопрос и ответы на него?
Ответ будет иметь видполе questionId и применяется тот же принцип индекса
получить ответы пользователя на вопросы определенного типа (введите как атрибут вопроса)
Вы можете добавить поле в Answer, которое является questionTypeи фильтр на это. Помните, что схема NoSQL ориентирована на запросы, которые вам нужны, а не на идеальную нормализованную схему.
Как рассчитывать одинаковые ответы на вопрос?
Я предполагаю, что вы имели в видусколько ответов у вопроса. Хорошо, если вы знаете вопрос, просто следуйте "получить вопрос и его ответы?"и выполните .withSelect(Select.COUNT)
для запроса
EDIT
User:
- userId (hash key)
- name
- surname
- age
Question:
- questionId (hash key)
- question (text)
- type
- author
- askedByUserId (index - hash key)
Answer:
- answerId (hash key)
- value
- date
- answeredByUserId (index - hash key)
- questionId (index - hash key)
Так что все зависит от того, как вы запрашиваете данные (и, конечно, вы можете в конечном итоге перейти на SQLдаже, noSQL не замена 1: 1). Ссылка просто по идентификатору не является неправильной, я предпочел бы иметь неизменные вопросы и ответы вместо того, чтобы редактировать вопрос каждый раз, когда он получает ответ. Поэтому учтите, что вы не можете использовать объединения и всегда предпочитаете неизменные данные (добавьте новое значение вместо редактирования).
РЕДАКТИРОВАТЬ 2
Для того, чтобы получитьВсе вопросы и ответы от пользователя, создайте и управляйте этой таблицей:
UserItems:
- userId (hash key)
- question (full json of a question, optional)
- answer (full json of a answer, optional)
Поэтому каждый раз, когда вы, например, создаете новый вопрос, добавляйте его и в вопрос, и в элементы пользователя. Сделайте простой запрос, основанный на хэш-ключе, и вы получите все вопросы и ответы с полными данными. Опять же, это зависит от ваших запросов.