Как организовать структуру БД для хранения товаров интернет-магазина?
У меня есть таблица "goods". Каждый товар может иметь общие атрибуты (артикул, цена, наименование, ..., - все те характеристики, которые одинаковы для всех товаров, не зависимо от их типа) и индивидуальные атрибуты (такие, как вес, цвет, объем памяти и пр.) Все общие атрибуты находятся в таблице "goods". Индивидуальные атрибуты находятся в отдельной таблице "individual_attributes". Еще у меня есть таблица "attributes_group". В ней я формирую своеобразные паттерны из атрибутов (процессор, ковер, телефон, ручка и пр.). Потом я назначаю товару одну из групп. Таким образом, у меня есть что-то вроде конструктора для формирования шаблона для любого типа товаров и его добавления в интернет-магазин.
Вроде все ничего, но мне еще нужно куда-то добавлять значения атрибутов для каждого товара. Думал сделать так: создаю отдельную таблицу "individual_attributes_values" со связью многие-к-одному по отношению к таблице "goods".
В ней я бы мог хранить значения индивидуальных атрибутов для всех товаров. А инфомацию бы забирал так: делаю один запрос для сборки атрибутов ("каркаса") для данного товара к связке таблиц (1). Потом циклом для каждого атрибута забираю его значение из связки (2). Но в таком случае получается много запросов. А хотелось бы собрать все в один ORM-объект одним запросом (использую Laravel). Есть мысли о том, как лучше БД организовать? Это все при том, что для каждого атрибута (individual_attributes) может быть, а может и не быть список фиксированных значений. Т.е. если он есть, то нельзя добавлять ничего, кроме этих значений. Если их нет, то значение задается произвольным текстом. Плюс к этому - потом поверх этого надо реализовать фасетный поиск (elasticsearch или sphinx).