我想建立一个具有多个类别的在线商店。例如,我们的第一个类别是电子产品(包括手机、笔记本电脑等(,我们的第二个类别是服装(包括T恤、裤子等(。 无论类别如何,所有产品都具有相同的属性,例如名称、品牌、价格、库存等。 每个类别都有独特的属性,例如电子产品类别具有分辨率、RAM 和 CPU 属性,服装类别包括性别、尺寸、性别和颜色等属性。
所以:
电子产品持续:名称,品牌,价格,库存,分辨率,RAM,CPU
服装连续:名称,品牌,价格,库存,性别,尺寸,性别,颜色
我已经为我的数据库想到了三种结构,我可以帮助您处理任何其他语句。 在所有结构中
第一个结构:
______tables | columns
---------------------------------------------------------------------
category : id, name
product : id, cat_ID, name, brand, price, inventory, OtherAttr
cat_ID有 category.id 的关系
其他 Attr 列类型为 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
并为每个其他类别创建一个关系表 这种结构增加了代码的大小,并占用了程序员更多的时间,但管理员更容易插入数据并提供更多的过滤功能。
我认为第二种结构是你应该使用的,它需要更多的改进,但这不是问题。
我不知道如何为具有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。