@darksladen

Как сделать свойства товаров в БД?

Задача следующая - делаю интернет магазин, в котором у товаров есть несколько атрибутов. Соответственно комбинация этих атрибутов будет иметь разную цену.. С этим у меня возникли большие сложности.

1) Как построить архитектуру в БД, чтобы свойства были динамические и их можно было бы добавлять к группам товара.
2) Окей, я изучил архитектуру eav и приблизительно понял, как буду их хранить, но как быть с выборкой немного непонятно.. То есть по идее у меня будут товары, к ним будут привязаны предложения, имеющие цену, к которым будут привязаны значения атрибутов товара.. То есть получается чтобы получить цену товара с конкретными характеристиками мне придётся сначала выбрать все предложения, связанные с айдишниками таких то значений?
3) Когда пользователь выбирает свойства, он должен видеть цену предложения, соответствующего выбранным атрибутам. Но если постоянно запрашивать её у сервера апдейт цены будет достаточно долгим.. Как лучше решить этот вопрос?
  • Вопрос задан
  • 599 просмотров
Пригласить эксперта
Ответы на вопрос 4
@blugamire
EAV - гуано по производительности
Его можно использовать для первичного хранения данных, перед тем как ты переваришь и выкинешь уже готовые для работы данные в Solr или Sphinx, например.

Но непосредственно для выборки данных EAV использовать нежелательно по соображениям производительности.

Если вам всенепременно хочется это сделать с реляционной СУБД, то вам поможет денормализация (данные будут дублироваться, но это не страшно, зато работать будет шустро).

А если вам хочется сделать это правильно и чтобы работало максимально быстрым образом, то я бы предложил рассмотреть более подходящие для данной задачи системы: Tarantool, Sphinx,
Solr.
Ответ написан
DarkRaven
@DarkRaven
разработка программного обеспечения
Если вы используете БД PostgreSQL, то можете хранить аттрибуты, к примеру, в JSON-поле таблицы. Они индексируются и не придется делать кучу JOIN, как с EAV, чтобы вытащить данные.

Но тут есть очевидные минусы, это удаление атрибута, к примеру. Может быть достаточно тяжелым. Но все зависит от способа реализации.

В целом, можно взять EAV и достраивать JOIN-ами к запросу атрибуты, а можно и JSON.
Забыл сказать, JSON поддерживает индексы и запросы по полям.
Ответ написан
@Kostik_1993
Web Developer
Если я правильно понял, то вы в неправильном направлении идете. Товары с разными характеристиками это разные товары, поэтому цену нужно выставлять товару, а не его характеристикам.
Ответ написан
ThunderCat
@ThunderCat
{PHP, MySql, HTML, JS, CSS} developer
Пример: есть лампочка фирмы филипс. И есть атрибут - мощность. 40, 60, 75, 99 ватт. Так вот, это 4 разных товара. Название одно, но группа атрибутов разная. То что вы можете их показать на странице товара как один товар должно задаваться полем товара с каким-то объединяющим ключом. Все.
Ответ написан
Ваш ответ на вопрос

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

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