В MongoDB решение о модели данных зависит от того, как твоё приложение читает и записывает данные, а не от правил реляционной нормализации. Основной принцип: встраивай данные, которые читаются вместе, ссылайся на данные, которые используются в нескольких местах.
Встраивай данные, если они:
Примеры в e-commerce:
users встраивают адреса — всегда загружаются с профилем пользователяproducts встраивают варианты и цены — постоянно запрашиваются вместеorders встраивают снимки товаров заказа — сохраняя цену и детали товара на момент покупки, даже если товар изменится позжеСсылайся на данные, если они:
Примеры в e-commerce:
orders ссылаются на users через userId — один пользователь связан со многими заказамиreviews ссылаются на products и users — избегая дублирования данных в коллекцияхinventory ссылается на products — уровни запасов часто меняются независимоorders: {
userId: ObjectId, // reference
items: [{ productSnapshot, qty, price }] // embedded snapshot
}
Паттерн снимка товара заказа критически важен — он разделяет историю заказов и актуальные данные товара, обеспечивая историческую точность.
| Фактор | Встраивание | Ссылка |
|---|---|---|
| Паттерн доступа | Вместе | Независимо |
| Тип связи | One-to-few | One-to-many / shared |
| Изменяемость | Стабильные | Часто обновляются |
Всегда моделируй схему исходя из паттернов запросов, и лишь потом думай о производительности записи и росте данных.
В MongoDB встраивание товаров заказа непосредственно в коллекцию orders позволяет сохранить точную цену товара и детали на момент покупки, даже если информация о товаре изменится позже.
Новый — ещё не проверен сообществом
Вы