Как бы вы разработали схему для блочного сайта с базами данных на основе документов (mongodb). Сайт имеет следующие объекты: Пользователь, Статья, Комментарий. Пользователь может добавлять комментарии к статье. Каждый Пользователь может также голосовать ровно один раз за комментарий.
Я хочу иметь возможность эффективно выполнять эти запросы:
1. получить статью A, комментарии к статье A и количество голосов за комментарии
2. получить все комментарии пользователя B по всем статьям
3. получить все комментарии Пользователь B проголосовал за
Моя первая попытка - разместить статьи и комментарии в отдельных сборниках, а комментарий может содержать список пользователей, голосовавших за него. Это упрощает запрос 1 и 2. И для 3 я добавил коллекцию Vote, которая отслеживает голоса пользователей.
Есть некоторые очевидные недостатки, такие как дублирование данных голосования пользователя и запроса 1, будут принимать два вызова в базу данных. Есть ли лучший подход?
Article {
"user_id"
}
Comment {
"user_id",
"article_id",
[user_voted],
}
Vote {
"user_id",
"comment_id",
}