Хранение реляционных данных в MongoDB (NoSQL)
Я пытался разобраться с NoSQL и вижу преимущества внедрения данных в документы.
То, что я не могу понять, и надеюсь, что кто-то может прояснить, как хранить данные, если они должны быть реляционными.
Например.
У меня много пользователей. Они все покупают товар. Поэтому каждый раз, когда они покупают продукт, мы добавляем его в документ пользователя в монго, чтобы он был встроен и все было замечательно.
У меня проблема, когда что-то в отношении этого продукта меняется.
Допустим, пользователь А покупает автомобиль под названием "Порше". Затем мы добавляем ссылку на это в профиле пользователя. Однако в странном повороте событий Porsche приобретается Ferrari.
Что вы делаете сейчас, обновляете каждую запись и меняете название с Porsche на Ferrari?
Обычно в SQL мы создаем 3 таблицы. Один для пользователей, один для автомобилей (описание, модель и т. Д.) И один для отображения пользователей на покупки.
Ты делаешь то же самое для Монго? Похоже, что если вы идете по этому пути, вы пытаетесь заставить Mongo делать вещи SQL-способом, а это не то, для чего он предназначен.
Я могу понять, насколько определенные данные хороши для встраивания (адреса, контактные данные, комментарии и т. Д.), Но что происходит, когда вам нужно ссылаться на данные, которые можно и нужно регулярно менять?
Надеюсь этот вопрос понятен
2 ответа
DBRefs/Manual Ссылки были сделаны специально для решения этой проблемы. Вместо того, чтобы вручную добавлять данные в каждый документ и затем обновлять их при изменении чего-либо, вы можете сохранить ссылку на другую коллекцию. Вот документация mongoDB для деталей.
Тогда все, что вам нужно будет сделать, это обновить коллекцию ссылок, и это изменение будет отражено во всех последующих расположениях.
Когда я использовал библиотеку mongoose для узла js, он на самом деле создает 3 таблицы, аналогично тому, как вы могли бы сделать это в SQL, вы можете использовать идентификаторы объектов в качестве внешних ключей и обогащать их либо на стороне клиента, либо на бэкэнде, но при этом не присоединяются, но вы может сделать запрос in для идентификаторов и затем обогатить объекты таким образом, mongoose может сделать это автоматически, заполнив