@phpcoder81

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

БД строго 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.
  • Вопрос задан
  • 139 просмотров
Пригласить эксперта
Ответы на вопрос 1
@sisn
Нормализация не рулит в данном случае.
Серьезно потеряете в производительности, когда будете отбирать по атрибутам.

EAV - вообще полная ж. по производительности.
Для упорядочивания хранения, чтобы не пухла голова программиста - EAV годится хорошо.
А вот для выборки....

Я бы положился на что-то более подходящее для этого случая - ElasticSearch, денормализованную форму в NoSQL и тп. - у них будет нормальная производительность.

А то что вы тут нарисовали - это прошлый век.
Не стоит, имхо.
SQL-база хорошо годится только для промежуточного хранения для дальнейшей передачи в ElasticSearch, Tarantool и т.п.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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