目前要做一个手机版商城, 在设计数据库时遇到该问题..
比如一件衣服,这件衣服有红色、白色、蓝色,
红色又有X,XL,XLL尺码,
白色有S,M,X,XL
蓝色有M,X,XL
对于自己设计的数据库一直感到不太满意,望各路大神,赐教.
此问题的引申 一般商场不可能只出售衣服 , 还有会有电子产品等等乱七八糟的 后期扩展性 要怎么办呢?
回复内容:
目前要做一个手机版商城, 在设计数据库时遇到该问题..
比如一件衣服,这件衣服有红色、白色、蓝色,
红色又有X,XL,XLL尺码,
白色有S,M,X,XL
蓝色有M,X,XL
对于自己设计的数据库一直感到不太满意,望各路大神,赐教.
此问题的引申 一般商场不可能只出售衣服 , 还有会有电子产品等等乱七八糟的 后期扩展性 要怎么办呢?
尺码(chimas)表
id | mark
------------
1 | X
2 | XL
3 | XLL
4 | M
5 | S
颜色(colors)表
id | color
------------
1 | 蓝
2 | 白
3 | 红
4 | 紫
5 | 灰
衣服(yifus)表
id | name
------------
1 | 大衣
2 | 毛裤
3 | 内衣
4 | 内裤
衣服与颜色关联(yifu_colors)表
id | color_id | yifu_id
----------------------------
1 | 1 | 1
2 | 1 | 2
3 | 2 | 1
4 | 2 | 2
衣服与尺码关联(yifu_chimas)表
id | chima_id | yifu_id
----------------------------
1 | 1 | 1
2 | 2 | 2
3 | 1 | 2
4 | 2 | 1
依你的需求里衣服包含款式、颜色、大小三个属性。 自然也就是对应四个逻辑数据表了。
你之前纠结的地方在于把颜色和大小附属于款式了。
前三个表引用二楼的
尺码(size)表
id | mark
------------
1 | X
2 | XL
3 | XLL
4 | M
5 | S
颜色(colors)表
id | color
------------
1 | 蓝
2 | 白
3 | 红
4 | 紫
5 | 灰
衣服(clothes)表
id | name
------------
1 | 大衣
2 | 毛裤
3 | 内衣
4 | 内裤
第四个表可以是直接是衣服跟尺码和颜色的关联表
衣服样式表(clothes_spec)
id | clothes_id | size_id | color_id
------------------------------------
1 | 1 | 1 | 2
2 | 2 | 1 | 2
3 | 1 | 3 | 1
第四个表这样做的好处是更清晰,因为少了一个表,查起来速度也快一点。但是不足是扩展起来比较麻烦,每添加一个属性就要向表中添加一个列。但是如果是商品量,用户量很大的情况下,这种方式还是比较有优势的。
扩展性是个问题,给出我的想法吧,坐等大牛给出扩展性好的方案:
id(商品id)
name(商品名称)
color(颜色)
size(尺码)
count(数量)
1
某衣服
red
M
0
1
某衣服
red
X
100
1
某衣服
red
XL
200
1
某衣服
red
XLL
300
查询红色衣服有哪些尺码
select size from table where id={id} and color='red' and count > 0
建议你去网上找关于库存SKU的文章和设计方法
商品表:
good_id, title, cate_id
类目属性表:
cate_id, attr_id
商品属性分类表:
attr_id, attr_label, attr_key(做alias用), attr_sort
1, 颜色, COLOR, 0
2, 尺码, SIZE, 1
商品属性详情表:
good_id, attr_value_id,attr_id, attr_value_title, attr_value_sort
1, 1, 1, 红色, 0
1, 2, 1, 蓝色, 1
1, 3, 2, 19, 0
1, 4, 2, 20, 1
如果你要考虑后期的扩展性,建议采用MySQL的EVA结构,不然上面的几种到扩展的时候,都比较麻烦。
这设计也太糟糕了。。SKU不能这么设计。
本文原创发布php中文网,转载请注明出处,感谢您的尊重!