Как организовать структуру БД для хранения товаров интернет-магазина?

У меня есть таблица "goods". Каждый товар может иметь общие атрибуты (артикул, цена, наименование, ..., - все те характеристики, которые одинаковы для всех товаров, не зависимо от их типа) и индивидуальные атрибуты (такие, как вес, цвет, объем памяти и пр.) Все общие атрибуты находятся в таблице "goods". Индивидуальные атрибуты находятся в отдельной таблице "individual_attributes". Еще у меня есть таблица "attributes_group". В ней я формирую своеобразные паттерны из атрибутов (процессор, ковер, телефон, ручка и пр.). Потом я назначаю товару одну из групп. Таким образом, у меня есть что-то вроде конструктора для формирования шаблона для любого типа товаров и его добавления в интернет-магазин.

goods -> (many-to-one) -> attributes_group -> (many-to-many) -> individual_attributes (1)

Вроде все ничего, но мне еще нужно куда-то добавлять значения атрибутов для каждого товара. Думал сделать так: создаю отдельную таблицу "individual_attributes_values" со связью многие-к-одному по отношению к таблице "goods".

goods -> (many-to-one) -> individual_attributes_values (2)

В ней я бы мог хранить значения индивидуальных атрибутов для всех товаров. А инфомацию бы забирал так: делаю один запрос для сборки атрибутов ("каркаса") для данного товара к связке таблиц (1). Потом циклом для каждого атрибута забираю его значение из связки (2). Но в таком случае получается много запросов. А хотелось бы собрать все в один ORM-объект одним запросом (использую Laravel). Есть мысли о том, как лучше БД организовать? Это все при том, что для каждого атрибута (individual_attributes) может быть, а может и не быть список фиксированных значений. Т.е. если он есть, то нельзя добавлять ничего, кроме этих значений. Если их нет, то значение задается произвольным текстом. Плюс к этому - потом поверх этого надо реализовать фасетный поиск (elasticsearch или sphinx).
  • Вопрос задан
  • 3906 просмотров
Пригласить эксперта
Ответы на вопрос 1
@stascer
web-программист
Моя реализация на MySQl и Sphinx -
blog.yamaker.ru/20-fasetnyy-poisk-filtraciya-obekt....
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы