Хранение реляционных данных в MongoDB (NoSQL)

Я пытался разобраться с NoSQL и вижу преимущества внедрения данных в документы.

То, что я не могу понять, и надеюсь, что кто-то может прояснить, как хранить данные, если они должны быть реляционными.

Например.

У меня много пользователей. Они все покупают товар. Поэтому каждый раз, когда они покупают продукт, мы добавляем его в документ пользователя в монго, чтобы он был встроен и все было замечательно.

У меня проблема, когда что-то в отношении этого продукта меняется.

Допустим, пользователь А покупает автомобиль под названием "Порше". Затем мы добавляем ссылку на это в профиле пользователя. Однако в странном повороте событий Porsche приобретается Ferrari.

Что вы делаете сейчас, обновляете каждую запись и меняете название с Porsche на Ferrari?

Обычно в SQL мы создаем 3 таблицы. Один для пользователей, один для автомобилей (описание, модель и т. Д.) И один для отображения пользователей на покупки.

Ты делаешь то же самое для Монго? Похоже, что если вы идете по этому пути, вы пытаетесь заставить Mongo делать вещи SQL-способом, а это не то, для чего он предназначен.

Я могу понять, насколько определенные данные хороши для встраивания (адреса, контактные данные, комментарии и т. Д.), Но что происходит, когда вам нужно ссылаться на данные, которые можно и нужно регулярно менять?

Надеюсь этот вопрос понятен

2 ответа

DBRefs/Manual Ссылки были сделаны специально для решения этой проблемы. Вместо того, чтобы вручную добавлять данные в каждый документ и затем обновлять их при изменении чего-либо, вы можете сохранить ссылку на другую коллекцию. Вот документация mongoDB для деталей.

Рекомендации в Монго

Тогда все, что вам нужно будет сделать, это обновить коллекцию ссылок, и это изменение будет отражено во всех последующих расположениях.

Когда я использовал библиотеку mongoose для узла js, он на самом деле создает 3 таблицы, аналогично тому, как вы могли бы сделать это в SQL, вы можете использовать идентификаторы объектов в качестве внешних ключей и обогащать их либо на стороне клиента, либо на бэкэнде, но при этом не присоединяются, но вы может сделать запрос in для идентификаторов и затем обогатить объекты таким образом, mongoose может сделать это автоматически, заполнив

Другие вопросы по тегам