@fLipE

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

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


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


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

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

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

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