Дизайн базы данных для рынка продуктов с несколькими категориями

Я хочу создать интернет-магазин с несколькими категориями. Например, наша первая категория - это электроника (включая мобильные телефоны, ноутбуки и т. Д.), А наша вторая категория - это одежда (включая футболки, брюки и т. Д.). Независимо от категории, все продукты имеют одинаковые атрибуты, такие как название, бренд, цена, инвентарь и т. Д. Каждая категория имеет уникальные атрибуты, например, категория электроники имеет разрешение, ОЗУ и атрибуты ЦП, а категория одежды включает такие атрибуты. как пол, размер, пол и цвет.


so:

электроника contine: название, марка, цена, инвентарь, разрешение, оперативная память, процессор

Континент одежды: название, марка, цена, инвентарь, пол, размер, пол, цвет


Я придумал три структуры для своей базы данных и могу помочь вам с любым другим утверждением. во всей структуре

Первая структура: ___________________________________________________________

tables   | columns
---------------------------------------------------------------------
category : id, name
product  : id, cat_ID, name, brand, price, inventory, OtherAttr

cat_ID имеет отношение к category.id

Тип столбцов otherAttr - json, и в этом столбце хранятся другие атрибуты, но поскольку я до сих пор не использовал столбцы jSon в базе данных, это меня немного беспокоит.

Второй состав: __________________________________________________________

tables          | columns
---------------------------------------------------------------------
category        : id, name
product         : id, cat_ID      , name, brand, price, inventory   
attributesName  : id, name        , description                    // STORE ATTR NAMES
attributesValue : id, attrName_ID , value                          // ALL POSSIBLE VALUES ​​FOREACH ATTR, SUCH AS MAIL AND FEMAIL FOR SEX
categoryAttr    : id, attrName_ID , cat_ID                         // ALL UNIQE ATTR FOR EACH CATEGORY SUCH AS SEX, SIZE, GENDER AND COLOR FOR CLOTHING
productsAttr    : id, product_ID  , attrValue_ID                   

Это очень гибкий метод, но в этой структуре беспокоит то, что вы не можете фильтровать продукты на основе нескольких уникальных атрибутов, например, я не знаю, как найти идеальный запрос для мобильного телефона с 2 ГБ ОЗУ и двумя основной процессор. ?

Третья структура ____________________________________________________________

tables      | columns
---------------------------------------------------------------------
category    : id, name
product     : id, cat_ID    , name      , brand, price , inventory
electronics : id, product_ID, resolution, RAM  , CPU
clothing    : id, product_ID, sex       , size , gender, color

и для каждой другой категории создать таблицу отношений. Эта структура увеличивает размер кода и требует больше времени от программиста, но администраторам проще вставлять данные и предоставлять больше возможностей фильтрации.


person Babak Golbaharan    schedule 20.12.2019    source источник
comment
Какой вопрос..?   -  person obe    schedule 21.12.2019
comment
Это обычная проблема, и хорошо, что вы рассматриваете ее на данном этапе своего проекта. В этом вопросе задается один и тот же вопрос, и есть отличный ответ, в котором обсуждаются различные подходы к нему. stackoverflow.com/questions/695752/   -  person Don't Panic    schedule 21.12.2019
comment
Удивительно, как никто не упомянул единицу измерения свойств.   -  person Alex    schedule 22.12.2019


Ответы (1)


Я думаю, что вам следует использовать вторую структуру, она требует дополнительных улучшений, но вопрос не в этом.

Я не знаю, как найти идеальный запрос для мобильного телефона с 2 ГБ оперативной памяти и двухъядерным процессором?

Вот пример SQL-запроса для поиска мобильного телефона с 2 ГБ оперативной памяти и двухъядерным процессором:

SELECT *
    FROM product
    WHERE cat_ID = mobile_cat_id_here
      AND EXISTS(
            SELECT 1
            FROM productsAttr
            WHERE productsAttr.product_ID = product.product_ID
              AND attrValue_ID = ram_2g_AttrValue_Id
        )
      AND EXISTS(
            SELECT 1
            FROM productsAttr
            WHERE productsAttr.product_ID = product.product_ID
              AND attrValue_ID = dual_core_AttrValue_Id
        )

mobile_cat_id_here - это идентификатор категории мобильных устройств, ram_2g_AttrValue_Id - идентификатор значения 2 ГБ ОЗУ, а dual_core_AttrValue_Id - идентификатор значения двухъядерного процессора.

person Kerkouch    schedule 21.12.2019
comment
спасибо за Ваш ответ. Как вы думаете, в чем проблема с третьей структурой? и в чем преимущество второй второй структуры перед третьей? - person Babak Golbaharan; 21.12.2019