PHP & MySQL построение архитектуры динамических фильтров для интернет каталога

Добрый день!
У меня возникла потребность в написании модуля интернет каталога.
И в нем нужно учесть возможность присутствия динамических полей, на пример может быть каталог одежды и у него будут динамически созданы поля (пол, размер) или на пример каталог автомобилей с динамическими полями (год выпуска, пробег, объем двигателя), количество полей тоже динамическое. И нужно создать к этому добру возможность фильтрации и сортировки.
Может быть кто то сталкивался с такой задачей?
Подскажите как вы организовывали архитектуру базы данных так что бы была возможность сортировки и фильтрации данных по динамическим полям?
  • Вопрос задан
  • 7644 просмотра
Решения вопроса 1
sHinE
@sHinE
веб-разработчик, php/js/mysql и сопутствующее
По-моему то, что вам нужно называется entity-attribute-value. Плюсы, минусы, критику и особенности реализации можно по этому словосочетанию поискать — написано много.
Личного опыта, к сожалению, нет.
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
wscms
@wscms
Создаете таблицу attribute с полями attribute_id, attribute_name
В этой таблице только текстовая информация, то есть собственно «Год выпуска», «Пробег», «Объем двигателя» и так далее

Создаете таблицу attribute_to_product с полями
id, product_id, attribute_id, attribute_value

И джойнами склеиваете таблицу products с аттрибутами
Ответ написан
el777
@el777
Как вариант можно рассмотреть PgSQL + hstore.
Система позволяет хранить в базе неструктурированные данные типа «хешей» и, самое главное, индексированно(!) по ним искать.
Делал пробный вариант, поиск по базе порядка 100К строк рандомных данных занимает около 100 мс.
Наврядли будет больше артикулов платьев или моделей авто.
Ответ написан
@S0mnium
У самого стоит задача написать подобное для интернет магазина, по данной тематике грамотного мануала не нашел, приходиться изобретать свое.
Ответ написан
Комментировать
customtema
@customtema
arint.ru
Если значения дискретные, можно сделать так.

Сначала все денормализовать до упора.

Группы товаров
— ID
— Название

Товары:
— ID
— Название

Свойства
— ID
— Группа товаров
— Название

Значения свойств
— ID
— ID свойства
— Значение

Значения свойств товара
— ID
— ID товара
— ID свойства
— ID значения свойства

Уже можно добавлять, редактировать, искать как угодно и показывать. Правда запросы будут жуткие — сложные и медленные. Поэтому на этом этапе целесообразно получить прототип, отладить его, и перейти к нормализации.

— добавить к товарам сериализованные данные {Свойство: Значение свойства}
— добавить обработку сериализации при действиях: добавление, редактирование, отбражение

На этом этапе уже будет работать намного быстрее.

Теперь, если нужно сделать высоконагруженный сервис — добавить кеширующие индексы. Такие специальные таблицы:
— запрос
— сериализованный результат последней выборки
— флаг актуальности выборки

И добавить метод, пересчитывающий флаг актуальности выборки при добавлении и редактировании.

Если интерфейс навороченный, индексов должно быть столько же, сколько наворотов.

Двигайтесь последовательно, используйте SCRUM или хотя бы UML — тогда сделаете в течении дня.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 16:53
1000 руб./за проект
19 апр. 2024, в 16:45
5000 руб./за проект
19 апр. 2024, в 16:22
30000 руб./за проект