nepster-web
@nepster-web

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

Есть задача реализовать фильтр поиска по товарам. Есть идея и сразу пачка споров по этому поводу.

Исходя из ТЗ идея и реализация примерно такая:

Таблица категорий (бытовая техника, компьютеры, еда и тп.).
Таблица свойств (цвет, объем, упаковка, производитель и тп.)
Таблица значений базовых свойств (красный, зеленый, 1 литр, самсунг и тп.)
Таблица значений персональных свойств (например дата срока годности конкретного товара)
Таблица связь категория-свойство
Таблица связь свойства-значения

Собственно мы получаем много таблиц, и при этом споры идут будет ли такая архитектура быстро работать ?

Особенно если есть задача поиска, когда человек к примеру вводит "Красный айфон", то нужно определить свойство по значению (в данном случае свойство цвет, значение красный) и показать товары исходя из данного цвета.

Расчитываю на советы от спецов.
  • Вопрос задан
  • 2337 просмотров
Решения вопроса 2
KorsaR-ZN
@KorsaR-ZN
Хорошая структура с учётом нормализации БД, при правильных sql-запросах проблем не возникнет.

Если исходить из того, какие поисковые запросы Вы будет посылать, то тут не обойтись без полнтекствого поискового движка аля сфинкс, а он большую часть нагрузки возьмёт на себя за счёт своих индексов и т.д.

Вы так же может слить данные таблицы в одну, с помощь view, где объедените только те поля, что не посредственно участвуют в фильтре, тем самым избавить код от лишних джойнов и перенести это на плече БД
Ответ написан
FanatPHP
@FanatPHP
Чебуратор тега РНР
Если отбросить все попытки объяснений (фантастически бессмысленных) из предыдущего ответа, и оставить только рекомендации, то придраться будет не к чему.

Описанная структура хорошо известна - она называется EAV. Непонятно, почему она названа многотабличной - такой подход как рах позволяет сильно экономить таблицы.

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

Если очень сильно хочется сократить количество таблиц - стоит посмореть в сторону нереляционных БД - например Монгу, которая идеально подходит для хранения каталога товаров.

Для поиска в любом случае надо использовать сфинкс - он для этого предназначен, и прекрасно справится с запросом "красный айфон" без какой-либо специальной подготовки. Как следствие, в силу использования внешнего поиска, мы оказывается отвязаны от структуры таблиц - она может быть любой, и для поиска не имеет значения.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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