【问题标题】:Database design for a multi-category product market多类别产品市场的数据库设计
【发布时间】:2019-12-20 23:33:27
【问题描述】:

我想建立一个具有多个类别的在线商店。例如,我们的第一类是电子产品(包括手机、笔记本电脑等),第二类是服装(包括 T 恤、裤子等)。 不分品类,所有产品都具有相同的属性,例如名称、品牌、价格、库存等。 每个类别都有独特的属性,例如电子类别有分辨率、RAM 和 CPU 属性,而服装类别包括性别、尺寸、性别和颜色等属性。


所以:

电子产品:名称、品牌、价格、库存、分辨率、RAM、CPU

服装种类:名称、品牌、价格、库存、性别、尺码、性别、颜色


我已经为我的数据库考虑了三种结构,我可以为您提供任何其他陈述。 在所有结构中

第一个结构:___________________________________________________________

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                   

这是一种非常灵活的方法,但这种结构令人担忧的是,您无法根据一些独特的属性过滤产品,例如,我不知道如何为具有 2GB 的移动设备找到完美的查询RAM和双核CPU。 ?

第三个结构______________________________________________________________

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

并为每个其他类别创建一个关系表 这种结构增加了代码的大小,占用了程序员更多的时间,但管理员更容易插入数据并提供更多的过滤功能。

【问题讨论】:

  • 有什么问题..?
  • 这是一个常见问题,您在项目的这个阶段考虑它是件好事。这个问题问的是同样的事情,并且有一个很好的答案讨论了一些不同的方法。 stackoverflow.com/questions/695752/…
  • 令人惊讶的是没有人提到属性的测量单位。

标签: php mysql database database-design online-store


【解决方案1】:

我认为第二种结构是您应该采用的结构,它需要更多改进,但这不是问题。

我不知道如何为具有 2GB RAM 和双核 CPU 的移动设备找到完美的查询?

以下是查找具有 2GB RAM 和双核 CPU 的手机的 SQL 查询示例:

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是手机的类别ID,ram_2g_AttrValue_Id是2G RAM值的ID,dual_core_AttrValue_Id是双核CPU值的ID。

【讨论】:

  • 感谢您的回答。您认为第三种结构的问题是什么?第二个第二个结构比第三个有什么优势?
猜你喜欢
  • 2018-08-27
  • 1970-01-01
  • 1970-01-01
  • 2019-07-14
  • 1970-01-01
  • 2011-11-27
  • 1970-01-01
  • 1970-01-01
  • 2011-02-09
相关资源
最近更新 更多