Как правильно организовать реляции в MongoDB?

Я только начал изучать MongoDB и на стадии проектирования приложения возник вопрос, как было бы правильно организовать реляцию сущностей для следующего случая:

Есть пользователи (users), их местоположения (locations, страна/город) и интересы пользователей (interests).

Так бы я делал, используя реляционную базу данных: в таблице users хранил бы ключ location_id и имел бы связывающую таблицу user_interests с полями user_id, interest_id.

На MongoDB я бы все данные хранил бы в документе user, например так:
user = {
  name: "Vasya",
  location: { country: "Russia", city: "Moscow" },
  interests: ["football", "music", "ruby on rails"]
}


Все бы классно, но необходимо будет организовать select страны, suggest городов и интересов. Поэтому, видимо, придется выносить все же locations и interests в отдельные коллекции.
Тогда у меня структура будет типа такой:
user = {
  name: "Vasya",
  location: LOCATIONS._id,
  interests: [INTERESTS._id, INTERESTS._id, INTERESTS._id]
}


И в итоге при выборке у меня все это будут отдельными запросами внутри, без JOIN-ов. Есть ли смысл тогда использовать NoSQL-решение вместо реляционной базы данных? Правильно ли я сделал вывод о структуре реляций?

Надеюсь, вы поможете мне с этим архитектурным моментом.
  • Вопрос задан
  • 3407 просмотров
Решения вопроса 1
@kaasius
Используйте лучше другую практику для получения и администрирования справочников.
Например - чтобы получить список уникальных значений локейшена, используйте db.collection.distinct("location"). При желании можно добавить query для ограничения выбираемых документов по критерию.

Соответственно, вы делаете из этого справочника саджест, и получаете неадминистрируемый словарь.

Если же хочется администрируемый словарь - можно просто все айтемы словаря хранить в одном документе и в документах пользователя сохранять текстовое представление. Это конечно не очень хорошо, если нужна локализация. Но тогда надо использовать ваш вариант.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
opium
@opium
Просто люблю качественно работать
В чем проблема селекта городов и страны в одном документе ?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы