@tim181987

Как реализовать модель конструктора?

Добрый день!

При разработке интернет-магазина на Ruby-on-Rails столкнулся с задачей реализации конструктора атрибутов товара. Вот в чём суть:

  1. - в магазине множество товаров
  2. - товары различного типа
  3. - каждый тип товаров содержит свой набор разнородных атрибутов с различными вариантами ввода-вывода (select, checkbox, radio и т.д.)
  4. - администратор должен иметь возможность создания произвольного типа товара с произвольным набором атрибутов и создания товаров данного типа


Хотелось бы услышать мнение пользователей Toster`a о том как лучше реализовать такую модель )

Конечно, я слышал про EAV data model, основанной на применении реляционной БД. Также, возможно применение документоориентированной БД. Но в первом случае получаем достаточно тяжёлые SQL запросы, а во втором сталкиваемся с необходимостью ручного обеспечения целостности данных.

Возможно есть другой путь?
Сталкивались ли вы с подобной задачей и как её решали, какова методология, может быть порекомендуете литературу?
  • Вопрос задан
  • 154 просмотра
Пригласить эксперта
Ответы на вопрос 2
@vsuhachev
Я решал такую задачу на РСУБД, особо сложного в ней ничего нет

NoSQL я бы рекомендовал применять только если вы разрабатываете что-то гигантское, где необходимо горизонтальное масштабирование на много серверов. Сам по себе схема-лесс можно реализовать и на postgres или mysql с помощью типов json/jsonb.

Целостность данных на прикладном уровне вам придется обеспечивать "вручную" (т.е. писать эту логику) в обоих случаях, независимо от хранилища.
Ответ написан
Комментировать
c3gdlk
@c3gdlk
Ментор в http://rubyboost.ru/
Постгрес и вроде даже мускуль умеют jsonb поля, так что новую базу ставить не надо.

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


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

P.S. исходя из опыта решения такой задачи могу еще подсказать, что Вам нужно хранить не только значения, но и данные конструктора, т.е какого типа поле, какие на нем валидации, возможные значения и так далее. Делать это лучше в реляционной модели, она идеально для этого подходит.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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