@fLipE

Как наиболее правильно реализовать каталог с фильтрами и сравнением?

Подскажите, как лучше реализовать каталог в данной ситуации.
Дано: старый фреймворк с контроллерами и smarty-шаблонами, множество товаров (более 5000) различного типа с разными характеристиками. Все характеристики забиты вручную в html-таблице. (да, html-таблица хранится в базе в поле "описание").
Характеристики вытащил в массив, теперь хотелось бы услышать совета от кого-то более опытного - как это всё лучше хранить?
В будущем хочу добавить фильтры по характеристикам, и сравнение товаров. Поэтому характеристики не хочу загонять в отдельную таблицу со связью many-to-many или json-поле.
Пока придумал такой вариант:
1. создание в таблице с товарами дополнительных столбцов (столько же, сколько максимально характеристик у товара, ~30).
2. после этого - создание конфиг-файла с типами товаров, перечислением и описанием столбцов для каждого типа товара.
т.е.:
камера => [
 поля => [
    поле_1 => [ // столбец в таблице бд называется также
        название => 'матрица'
     ]
  ]
],
блок питания => [
  поля => [
    поле_1 => [
      назввание => 'ампераж'
    ]
  ]
]


Таким образом, можно будет быстро получить информацию о любом товаре/группе товаров, или сформировать выборку по любым критериям.
Но может есть способ получше?)
  • Вопрос задан
  • 96 просмотров
Решения вопроса 2
@Kostik_1993
PHP Backend Developer, Laravel, Yii, Vue, Node.js
Тоесть ты решил не делать так как наиболее правильно, но при этом по твоему мнению будет лучше сделать столбцы?
Нет вариант вынести их в отдельную таблицу это самый правильный или ещё будет можно в JSON
В обоих случаях можно сделать фильтрацию
Остальное это ненужная недооптимизация
Ответ написан
@dimoff66
Кратко о себе: Я есть
В будущем хочу добавить фильтры по характеристикам, и сравнение товаров. Поэтому характеристики не хочу загонять в отдельную таблицу со связью many-to-many


А как одно связано с другим? Каким образом хранение характеристик и их значений в отдельной таблице может помешать добавлению фильтров по характеристикам? Никак. Хранение характеристик в отдельной таблице с полями product_id property_id value (возможно value_string, value_number, value_date) никак не помешает фильтрации, сравнению и т.п.

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

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

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