MongoDB дизайн документа электронной коммерции продукта - PullRequest
4 голосов
/ 04 марта 2012

Я создаю сайт электронной коммерции и решил попробовать MongoDB.Моя цель - добиться полной гибкости, чтобы в конечном итоге я не был привязан к продаже определенных продуктов, ограничиваясь тем, как система была изначально собрана.

Следовательно, цель гибкости, я должен бытьвозможность создавать продукты на основе атрибутов.Fx.цвет, производство, скорость и т. д. Все атрибуты должны быть необязательными.Пользователь может создавать новые атрибуты, некоторые из которых являются системными атрибутами по умолчанию (не удаляются).В зависимости от конфигурации атрибута он будет наложен на «базовый» или настраиваемый продукт.

  • В каталоге я хочу разделить продукты с помощью цветового атрибута, чтобы каждый цветпредставляет как отдельный продукт.Могу ли я добиться этого с MongoDB, используя мой текущий дизайн документа?
  • Я пришел к выводу, что при выборе продуктов из MongoDB и до представления я должен либо «переполнить» свой документ, либо выполнитьмного картографирования данных.Я не прав?
  • Какой самый лучший и эффективный способ управления запасами, учитывая, что у некоторых продуктов есть варианты (цвет, размер), а у других нет?

Как видно из моегоНапример, у меня есть обычные атрибуты, хранящиеся в атрибутах, и «обязательные» атрибуты, которые можно найти в параметрах документа.

Можно ли как-нибудь улучшить документ моего продукта с точки зрения упрощения работы?Я боюсь, что я либо переусердствую, либо недооцениваю что-то, поскольку считаю, что мои идеи «повреждены» при работе с реляционными базами данных.

1 Ответ

1 голос
/ 05 марта 2012

Я думаю, что ваш дизайн будет работать нормально, хотя я не вижу необходимости разделять обязательные и необязательные атрибуты на отдельные вложенные документы.

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

product = db.products.findOne({sku: "..."})
for color in product.colors:
    # render the product with the color

Нет необходимости «переполнять» ваш документ - я предполагаю, что вы хотите сохранить нулевые значения для каждого возможного атрибута?Код вашего приложения должен просто проверить, присутствует ли в документе необязательное значение, и на основании этого принять решения по визуализации или бизнес-логике.Сильной стороной MongoDB является его гибкость.Не все документы должны быть одинаковыми.Код вашего приложения должен быть написан для обработки документов, которые не имеют всех возможных полей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...