Какой способ посоветуете в реализации свойств полей для продукта?

Здравствуйте!

Сейчас размышляю над решением по реализации свойств (товара/объявления).
Суть следующая:
- Есть категории (разделы) различные с вложением и без
- Есть товары/объявления которые относятся к разделу
- У каждого товара есть свойства отличающиеся для каждого раздела

Базу данных планирую использовать Postgres

Вариант 1
Создать таблицу категории
Создать для каждой категории товара/объявлений отдельную таблицу (модель) со свойствами в которой будут храниться данные

Вариант 2
Создать таблицу свойств, где будут все свойства, id категории и их тип (текст, число, список и т.д)
Создать таблицу товары/объявления содержащая общее параметры, такие как название и id категории
Создать таблицу категории
Создать таблицу данные которая будет хранить id товара, id свойства и значение которое было присвоено

Вариант 3
Создать таблицу категории
Создать таблицу моделей товара которая будет хранить namespace модели товара
Создать таблицу списка полей которая будет хранить список полей для id модели товара и их тип (что то вроде админки voyager для ларавел)
Создать для каждой категории таблицу товаров/объявлений со значениями свойств (или может создать отдельную таблицу хранящую значения)

Размышляя над этими вопросами оглядываюсь на такие сервисы как:
авито, юла, юрмалт и т.д.

Надеюсь мысль над которой размышляю донес )
Какой вариант посоветуете или может быть предложите свой проверенный способ?
  • Вопрос задан
  • 426 просмотров
Пригласить эксперта
Ответы на вопрос 3
@deliro
Агрессивное программирование
Если постгрес, то детально изучи эту статью
Ответ написан
webinar
@webinar
Учим yii: https://youtu.be/-WRMlGHLgRg
category:                id | l_key | r_key | level | name
product:                 id | name
product_category:       product_id | cat_id
option:                  id | category_id | name
product_option:          option_id | product_id | value


Но могут быть нюансы. Слишком мало о проекте Вы рассказали.

Базу данных планирую использовать Postgres

сразу не обратил внимание, тогда лучше как советует Алексей Долгов - json
Ответ написан
В Postgres есть форматы JSON и JSONB, тоесть можно хранить товары например так
id товара - 1
category_id - 1
json - {
"name":"Коляска",
"color":"Зеленая"
}
Мне такой способ кажется очень гибким и расширяемым.правда имеет свои минусы.
Для категорий наверное
id
parent_id - Id родителя для категории, если он есть, иначе 0
name

Под вариантом 2 вы наверное имели ввиду реализацию EAV(Entity-Attribute-Value). Довольно популярное решение для многих CMS интернет-магазинов, таких как Magento например, но в таком случае получаются очень сложные запросы к БД которые сложновато оптимизировать.

Так что NoSQL решение или использовать формат JSON в Postgres мне кажется предпочтительней, хотя на вкус и цвет как говорится
Ответ написан
Ваш ответ на вопрос

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

Войти через TM ID
Похожие вопросы