Как организовать структуру БД для интернет магазина?
БД строго MYSQL
Есть две таблицы для товаров
product (`id`, `category`, `name`, `about`, ...)
product_attribute (`id`, `id_product`, `color`, `available`, `price`)
У каждого товара есть вариации. Деление на цвета. Приняли решение разбить на две таблицы, чтобы не дублировать один и тот же товар в первой таблице, выводя через GROUP BY или DISTINCT.
Но есть товары, у которых нет деления на атрибут "цвет". Следовательно в таблицу product_attribute вставляется строка со значением color = NULL.
Можно и не добавлять вообще строку во вторую таблицу, но тогда может возникнуть путаница и придется использовать LEFT JOIN, тк опорная таблица получается вторая (по которой идет сравнение цен, наличия). Обычного SELECT хватает. Вопрос, правильная ли структура у БД? Или лучше было создать третью таблицу с параметром, по принципу EAV?
Смущает то, что основная таблица получается вторая product_attribute.
Immortal_pony: нет, проблема в том, что цена и наличие товара сейчас ставится в атрибут (модификация), это вторая таблица. У одного товара для разных цветов может быть РАЗНАЯ цена и наличие.
Нормализация не рулит в данном случае.
Серьезно потеряете в производительности, когда будете отбирать по атрибутам.
EAV - вообще полная ж. по производительности.
Для упорядочивания хранения, чтобы не пухла голова программиста - EAV годится хорошо.
А вот для выборки....
Я бы положился на что-то более подходящее для этого случая - ElasticSearch, денормализованную форму в NoSQL и тп. - у них будет нормальная производительность.
А то что вы тут нарисовали - это прошлый век.
Не стоит, имхо.
SQL-база хорошо годится только для промежуточного хранения для дальнейшей передачи в ElasticSearch, Tarantool и т.п.